class LinkedListEntry
{
public LinkedListEntry Next;
public int Value;
}
class LinkedList
{
public LinkedListEntry Head;
public int size()
{
int count = 0;
for (LinkedListEntry entry = Head; entry != null; entry = entry.Next)
++count;
return count;
}
public void add(int index, int e)
{
LinkedListEntry newEntry = new LinkedListEntry();
newEntry.Value = e;
if (index == 0)
{
Head = newEntry;
return;
}
LinkedListEntry entry = Head;
for (int i = 1; i < index; ++i)
entry = entry.Next;
entry.Next = newEntry;
}
public void add(int e)
{
add(size(), e);
}
public void remove(int index)
{
LinkedListEntry entry = Head;
for (int i = 1; i < index; ++i)
entry = entry.Next;
entry.Next = entry.Next.Next;
}
public int get(int index)
{
LinkedListEntry entry = Head;
for (int i = 0; i < index; ++i)
entry = entry.Next;
return entry.Value;
}
}
class __CPROVER_nondet
{
public static int nondet_int()
{
return 0;
}
}
class __CPROVER_synthesis
{
public static int accumulator(int aggregated, int e)
{
return 0;
}
public static boolean predicate(int lhs)
{
return true;
}
}
class SatList1
{
private static int stream(LinkedList list)
{
// java.util.stream.Stream.filter(...)
int index = 0;
for (LinkedListEntry entry = list.Head; entry != null; entry = entry.Next)
if (__CPROVER_synthesis.predicate(entry.Value))
++index;
else
list.remove(index);
// java.util.stream.Stream.reduce(...)
int aggregated = 0;
for (LinkedListEntry it = list.Head; it != null; it = it.Next)
aggregated = __CPROVER_synthesis.accumulator(aggregated, it.Value);
return aggregated;
}
public static void main(String[] args)
{
LinkedList lhs = new LinkedList();
LinkedList rhs = new LinkedList();
int size = 10;
for (int i = 0; i < size; ++i)
{
int value = __CPROVER_nondet.nondet_int();
lhs.add(i, value);
rhs.add(i, value);
}
int lhs_result = 0;
for (LinkedListEntry it = lhs.Head; it != null; it = it.Next)
{
if (it.Value % 2 == 0)
if (lhs_result < it.Value)
lhs_result = it.Value;
}
int rhs_result = stream(rhs);
assert(lhs_result == rhs_result);
}
}