FA-90016 / Bytecode virtual machines / Open access
Constant pool: Long and Double occupy one slot · case 01
Every reference after the first 8-byte constant resolves to its neighbour.
ROOT CAUSE
The index counter advances by one for every entry, ignoring two-slot constants.
VERIFIED REPAIR
Advance the index by two after Long and Double entries.
Unsuccessful approach: Handling Long but not Double still shifts every index after a Double.
Case contract
pool lists entries in file order; indexes start at 1 and Long/Double entries occupy two indexes (the second is unusable). Resolution: Utf8 -> text; Integer/Long/Double -> value; String -> quoted Utf8 text; Class -> Utf8 binary name with "/" turned into "."; NameAndType -> "name:descriptor"; Methodref and Fieldref -> "Class.name:descriptor" where the owner must be a Class entry and the second index a NameAndType. Any index that is missing or of the wrong kind yields ["bad-ref", index].
Why this case matters
Class loaders and interpreters must resolve symbolic references against the exact pool layout.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(pool, queries):
table = {}
idx = 1
for e in pool:
table[idx] = e
idx += 1
def utf(i):
e = table.get(i)
if e is None or e[0] != 'Utf8':
raise LookupError(i)
return e[1]
def res(i):
e = table.get(i)
if e is None:
raise LookupError(i)
kind = e[0]
if kind == 'Utf8':
return e[1]
if kind in ('Integer', 'Long', 'Double'):
return e[1]
if kind == 'String':
return '"' + utf(e[1]) + '"'
if kind == 'Class':
return utf(e[1]).replace('/', '.')
if kind == 'NameAndType':
return utf(e[1]) + ':' + utf(e[2])
if kind in ('Methodref', 'Fieldref'):
c = table.get(e[1])
if c is None or c[0] != 'Class':
raise LookupError(e[1])
n = table.get(e[2])
if n is None or n[0] != 'NameAndType':
raise LookupError(e[2])
return res(e[1]) + '.' + res(e[2])
raise LookupError(i)
out = []
for q in queries:
try:
out.append(res(q))
except LookupError as err:
out.append(['bad-ref', err.args[0]])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression: method reference',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[6]),
['java.lang.String.length1:()I']),
('entries after a Long keep their index',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[9, 8]),
[41, ['bad-ref', 8]]),
('entries after a Double keep their index',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[12, 18]),
['"length1"', 7]),
('field reference',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[13]),
['java.lang.String.length1:()I']),
('method reference with non-Class owner',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[14]),
[['bad-ref', 1]]),
('string constant pointing at an Integer',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[15]),
[['bad-ref', 9]]),
('nested package class name',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[17, 2]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[5]),
['length1:()I']),
('index zero is invalid',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[7]),
['java.lang.String.length2:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[10, 9]),
[42, ['bad-ref', 9]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[13, 19]),
['"length2"', 14]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[14]),
['java.lang.String.length2:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[15]),
[['bad-ref', 2]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[16]),
[['bad-ref', 10]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[18, 3]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[6]),
['length2:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[8]),
['java.lang.String.length3:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[11, 10]),
[43, ['bad-ref', 10]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[14, 20]),
['"length3"', 21]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[15]),
['java.lang.String.length3:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[16]),
[['bad-ref', 3]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[17]),
[['bad-ref', 11]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[19, 4]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[7]),
['length3:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[9]),
['java.lang.String.length4:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[12, 11]),
[44, ['bad-ref', 11]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[15, 21]),
['"length4"', 28]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[16]),
['java.lang.String.length4:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[17]),
[['bad-ref', 4]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[18]),
[['bad-ref', 12]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[20, 5]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[8]),
['length4:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[10]),
['java.lang.String.length5:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[13, 12]),
[45, ['bad-ref', 12]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[16, 22]),
['"length5"', 35]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[17]),
['java.lang.String.length5:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[18]),
[['bad-ref', 5]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[19]),
[['bad-ref', 13]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[21, 6]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[9]),
['length5:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[0]),
[['bad-ref', 0]])]]
for label, args, expected in cases[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: method reference | ['java.lang.String.length1:()I'] | ['java.lang.String.length1:()I'] | Passed |
| entries after a Long keep their index | [2.5, 41] | [41, ['bad-ref', 8]] | Failed |
| entries after a Double keep their index | [['bad-ref', 1], ['bad-ref', 18]] | ['"length1"', 7] | Failed |
| field reference | [['bad-ref', 9]] | ['java.lang.String.length1:()I'] | Failed |
| method reference with non-Class owner | ['java/util/Map$Entry'] | [['bad-ref', 1]] | Failed |
| string constant pointing at an Integer | [['bad-ref', 16]] | [['bad-ref', 9]] | Failed |
| nested package class name | [['bad-ref', 17], 'java.lang.String'] | ['java.util.Map$Entry', 'java.lang.String'] | Failed |
| name and type | ['length1:()I'] | ['length1:()I'] | Passed |
| index zero is invalid | [['bad-ref', 0]] | [['bad-ref', 0]] | Passed |
SHA-256 / 5fe660245bd9c62c188fa23acae4777e8a9ef2b523cd4341b5b27bf5aec1c462
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(pool, queries):
table = {}
idx = 1
for e in pool:
table[idx] = e
idx += 2 if e[0] == 'Long' else 1
def utf(i):
e = table.get(i)
if e is None or e[0] != 'Utf8':
raise LookupError(i)
return e[1]
def res(i):
e = table.get(i)
if e is None:
raise LookupError(i)
kind = e[0]
if kind == 'Utf8':
return e[1]
if kind in ('Integer', 'Long', 'Double'):
return e[1]
if kind == 'String':
return '"' + utf(e[1]) + '"'
if kind == 'Class':
return utf(e[1]).replace('/', '.')
if kind == 'NameAndType':
return utf(e[1]) + ':' + utf(e[2])
if kind in ('Methodref', 'Fieldref'):
c = table.get(e[1])
if c is None or c[0] != 'Class':
raise LookupError(e[1])
n = table.get(e[2])
if n is None or n[0] != 'NameAndType':
raise LookupError(e[2])
return res(e[1]) + '.' + res(e[2])
raise LookupError(i)
out = []
for q in queries:
try:
out.append(res(q))
except LookupError as err:
out.append(['bad-ref', err.args[0]])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression: method reference',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[6]),
['java.lang.String.length1:()I']),
('entries after a Long keep their index',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[9, 8]),
[41, ['bad-ref', 8]]),
('entries after a Double keep their index',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[12, 18]),
['"length1"', 7]),
('field reference',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[13]),
['java.lang.String.length1:()I']),
('method reference with non-Class owner',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[14]),
[['bad-ref', 1]]),
('string constant pointing at an Integer',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[15]),
[['bad-ref', 9]]),
('nested package class name',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[17, 2]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[5]),
['length1:()I']),
('index zero is invalid',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[7]),
['java.lang.String.length2:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[10, 9]),
[42, ['bad-ref', 9]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[13, 19]),
['"length2"', 14]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[14]),
['java.lang.String.length2:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[15]),
[['bad-ref', 2]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[16]),
[['bad-ref', 10]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[18, 3]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[6]),
['length2:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[8]),
['java.lang.String.length3:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[11, 10]),
[43, ['bad-ref', 10]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[14, 20]),
['"length3"', 21]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[15]),
['java.lang.String.length3:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[16]),
[['bad-ref', 3]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[17]),
[['bad-ref', 11]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[19, 4]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[7]),
['length3:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[9]),
['java.lang.String.length4:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[12, 11]),
[44, ['bad-ref', 11]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[15, 21]),
['"length4"', 28]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[16]),
['java.lang.String.length4:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[17]),
[['bad-ref', 4]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[18]),
[['bad-ref', 12]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[20, 5]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[8]),
['length4:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[10]),
['java.lang.String.length5:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[13, 12]),
[45, ['bad-ref', 12]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[16, 22]),
['"length5"', 35]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[17]),
['java.lang.String.length5:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[18]),
[['bad-ref', 5]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[19]),
[['bad-ref', 13]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[21, 6]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[9]),
['length5:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[0]),
[['bad-ref', 0]])]]
for label, args, expected in cases[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: method reference | ['java.lang.String.length1:()I'] | ['java.lang.String.length1:()I'] | Passed |
| entries after a Long keep their index | [41, ['bad-ref', 8]] | [41, ['bad-ref', 8]] | Passed |
| entries after a Double keep their index | ['java.lang.String.length1:()I', ['bad-ref', 18]] | ['"length1"', 7] | Failed |
| field reference | [['bad-ref', 1]] | ['java.lang.String.length1:()I'] | Failed |
| method reference with non-Class owner | [['bad-ref', 9]] | [['bad-ref', 1]] | Failed |
| string constant pointing at an Integer | ['java/util/Map$Entry'] | [['bad-ref', 9]] | Failed |
| nested package class name | [7, 'java.lang.String'] | ['java.util.Map$Entry', 'java.lang.String'] | Failed |
| name and type | ['length1:()I'] | ['length1:()I'] | Passed |
| index zero is invalid | [['bad-ref', 0]] | [['bad-ref', 0]] | Passed |
SHA-256 / b5cb114a1633c2d6fcb60476eb7cb461e71ff6305544c6a012030b6c60a68130
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(pool, queries):
table = {}
idx = 1
for e in pool:
table[idx] = e
idx += 2 if e[0] in ('Long', 'Double') else 1
def utf(i):
e = table.get(i)
if e is None or e[0] != 'Utf8':
raise LookupError(i)
return e[1]
def res(i):
e = table.get(i)
if e is None:
raise LookupError(i)
kind = e[0]
if kind == 'Utf8':
return e[1]
if kind in ('Integer', 'Long', 'Double'):
return e[1]
if kind == 'String':
return '"' + utf(e[1]) + '"'
if kind == 'Class':
return utf(e[1]).replace('/', '.')
if kind == 'NameAndType':
return utf(e[1]) + ':' + utf(e[2])
if kind in ('Methodref', 'Fieldref'):
c = table.get(e[1])
if c is None or c[0] != 'Class':
raise LookupError(e[1])
n = table.get(e[2])
if n is None or n[0] != 'NameAndType':
raise LookupError(e[2])
return res(e[1]) + '.' + res(e[2])
raise LookupError(i)
out = []
for q in queries:
try:
out.append(res(q))
except LookupError as err:
out.append(['bad-ref', err.args[0]])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression: method reference',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[6]),
['java.lang.String.length1:()I']),
('entries after a Long keep their index',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[9, 8]),
[41, ['bad-ref', 8]]),
('entries after a Double keep their index',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[12, 18]),
['"length1"', 7]),
('field reference',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[13]),
['java.lang.String.length1:()I']),
('method reference with non-Class owner',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[14]),
[['bad-ref', 1]]),
('string constant pointing at an Integer',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[15]),
[['bad-ref', 9]]),
('nested package class name',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[17, 2]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[5]),
['length1:()I']),
('index zero is invalid',
([['Utf8', 'java/lang/String'],
['Class', 1],
['Utf8', 'length1'],
['Utf8', '()I'],
['NameAndType', 3, 4],
['Methodref', 2, 5],
['Long', 1234567890124],
['Integer', 41],
['Double', 2.5],
['String', 3],
['Fieldref', 2, 5],
['Methodref', 1, 5],
['String', 9],
['Utf8', 'java/util/Map$Entry'],
['Class', 16],
['Integer', 7]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[7]),
['java.lang.String.length2:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[10, 9]),
[42, ['bad-ref', 9]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[13, 19]),
['"length2"', 14]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[14]),
['java.lang.String.length2:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[15]),
[['bad-ref', 2]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[16]),
[['bad-ref', 10]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[18, 3]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[6]),
['length2:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'java/lang/String'],
['Class', 2],
['Utf8', 'length2'],
['Utf8', '()I'],
['NameAndType', 4, 5],
['Methodref', 3, 6],
['Long', 1234567890125],
['Integer', 42],
['Double', 5.0],
['String', 4],
['Fieldref', 3, 6],
['Methodref', 2, 6],
['String', 10],
['Utf8', 'java/util/Map$Entry'],
['Class', 17],
['Integer', 14]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[8]),
['java.lang.String.length3:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[11, 10]),
[43, ['bad-ref', 10]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[14, 20]),
['"length3"', 21]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[15]),
['java.lang.String.length3:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[16]),
[['bad-ref', 3]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[17]),
[['bad-ref', 11]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[19, 4]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[7]),
['length3:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'java/lang/String'],
['Class', 3],
['Utf8', 'length3'],
['Utf8', '()I'],
['NameAndType', 5, 6],
['Methodref', 4, 7],
['Long', 1234567890126],
['Integer', 43],
['Double', 7.5],
['String', 5],
['Fieldref', 4, 7],
['Methodref', 3, 7],
['String', 11],
['Utf8', 'java/util/Map$Entry'],
['Class', 18],
['Integer', 21]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[9]),
['java.lang.String.length4:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[12, 11]),
[44, ['bad-ref', 11]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[15, 21]),
['"length4"', 28]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[16]),
['java.lang.String.length4:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[17]),
[['bad-ref', 4]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[18]),
[['bad-ref', 12]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[20, 5]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[8]),
['length4:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'java/lang/String'],
['Class', 4],
['Utf8', 'length4'],
['Utf8', '()I'],
['NameAndType', 6, 7],
['Methodref', 5, 8],
['Long', 1234567890127],
['Integer', 44],
['Double', 10.0],
['String', 6],
['Fieldref', 5, 8],
['Methodref', 4, 8],
['String', 12],
['Utf8', 'java/util/Map$Entry'],
['Class', 19],
['Integer', 28]],
[0]),
[['bad-ref', 0]])],
[('regression: method reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[10]),
['java.lang.String.length5:()I']),
('entries after a Long keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[13, 12]),
[45, ['bad-ref', 12]]),
('entries after a Double keep their index',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[16, 22]),
['"length5"', 35]),
('field reference',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[17]),
['java.lang.String.length5:()I']),
('method reference with non-Class owner',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[18]),
[['bad-ref', 5]]),
('string constant pointing at an Integer',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[19]),
[['bad-ref', 13]]),
('nested package class name',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[21, 6]),
['java.util.Map$Entry', 'java.lang.String']),
('name and type',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[9]),
['length5:()I']),
('index zero is invalid',
([['Utf8', 'pad0'],
['Utf8', 'pad1'],
['Utf8', 'pad2'],
['Utf8', 'pad3'],
['Utf8', 'java/lang/String'],
['Class', 5],
['Utf8', 'length5'],
['Utf8', '()I'],
['NameAndType', 7, 8],
['Methodref', 6, 9],
['Long', 1234567890128],
['Integer', 45],
['Double', 12.5],
['String', 7],
['Fieldref', 6, 9],
['Methodref', 5, 9],
['String', 13],
['Utf8', 'java/util/Map$Entry'],
['Class', 20],
['Integer', 35]],
[0]),
[['bad-ref', 0]])]]
for label, args, expected in cases[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: method reference | ['java.lang.String.length1:()I'] | ['java.lang.String.length1:()I'] | Passed |
| entries after a Long keep their index | [41, ['bad-ref', 8]] | [41, ['bad-ref', 8]] | Passed |
| entries after a Double keep their index | ['"length1"', 7] | ['"length1"', 7] | Passed |
| field reference | ['java.lang.String.length1:()I'] | ['java.lang.String.length1:()I'] | Passed |
| method reference with non-Class owner | [['bad-ref', 1]] | [['bad-ref', 1]] | Passed |
| string constant pointing at an Integer | [['bad-ref', 9]] | [['bad-ref', 9]] | Passed |
| nested package class name | ['java.util.Map$Entry', 'java.lang.String'] | ['java.util.Map$Entry', 'java.lang.String'] | Passed |
| name and type | ['length1:()I'] | ['length1:()I'] | Passed |
| index zero is invalid | [['bad-ref', 0]] | [['bad-ref', 0]] | Passed |
SHA-256 / d020ccfc84b79f79d10e7fa7ac224ca36488f004d53b7f17892c874fe55d3a19
Verification & scope
A deterministic, bounded teaching model of one bytecode virtual machine mechanism with a stipulated instruction encoding; it is not a production VM and claims no conformance to any real specification. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:51:22.701394+00:00.
Case digest / cc31ef60347d137d02a8f021f613bd463cfed061b1c99b9f2cb7aa9a99c4a4b4