build "core init test/new_delete"

create_boot_directory

install_config {
	<config>
		<parent-provides>
			<service name="LOG"/>
			<service name="ROM"/>
			<service name="CPU"/>
			<service name="PD"/>
		</parent-provides>
		<default-route>
			<any-service> <parent/> </any-service>
		</default-route>
		<default caps="100"/>
		<start name="test-new_delete">
			<resource name="RAM" quantum="10M"/>
		</start>
	</config>
}

build_boot_image "core ld.lib.so init test-new_delete"

append qemu_args "-nographic "

run_genode_until "Test done.*\n" 20

grep_output  {^\[init -> test-new_delete\]}

compare_output_to {
	[init -> test-new_delete] Allocator::alloc()
	[init -> test-new_delete]   A
	[init -> test-new_delete]   C
	[init -> test-new_delete]   B
	[init -> test-new_delete]   D
	[init -> test-new_delete]   E
	[init -> test-new_delete]   ~E
	[init -> test-new_delete]   ~D
	[init -> test-new_delete]   ~B
	[init -> test-new_delete]   ~C
	[init -> test-new_delete]   ~A
	[init -> test-new_delete] Allocator::free()
	[init -> test-new_delete] Allocator::alloc()
	[init -> test-new_delete]   A
	[init -> test-new_delete]   C
	[init -> test-new_delete]   B
	[init -> test-new_delete]   D
	[init -> test-new_delete]   E
	[init -> test-new_delete] throw exception
	[init -> test-new_delete]   ~D
	[init -> test-new_delete]   ~B
	[init -> test-new_delete]   ~C
	[init -> test-new_delete]   ~A
	[init -> test-new_delete] Allocator::free()
	[init -> test-new_delete] exception caught
	[init -> test-new_delete] Allocator::alloc()
	[init -> test-new_delete]   A
	[init -> test-new_delete]   C
	[init -> test-new_delete]   B
	[init -> test-new_delete]   D
	[init -> test-new_delete]   E
	[init -> test-new_delete]   ~E
	[init -> test-new_delete]   ~D
	[init -> test-new_delete]   ~B
	[init -> test-new_delete]   ~C
	[init -> test-new_delete]   ~A
	[init -> test-new_delete] Allocator::free()
	[init -> test-new_delete] Allocator::alloc()
	[init -> test-new_delete]   A
	[init -> test-new_delete]   C
	[init -> test-new_delete]   B
	[init -> test-new_delete]   D
	[init -> test-new_delete]   E
	[init -> test-new_delete] throw exception
	[init -> test-new_delete]   ~D
	[init -> test-new_delete]   ~B
	[init -> test-new_delete]   ~C
	[init -> test-new_delete]   ~A
	[init -> test-new_delete] Allocator::free()
	[init -> test-new_delete] exception caught
}