using GLib;

public class test: Object {
	
	public SourceFunc ext_callback;
	
	public async int test_function() {
		
		this.ext_callback = test_function.callback;
		GLib.stdout.printf("Entering async function\n");

#if DO_YIELD
		GLib.stdout.printf("Doing Yield\n");
		yield;
		GLib.stdout.printf("Continuing after Yield\n");
#endif
			
		GLib.stdout.printf("Exiting async function\n");
		return 1;
	}

	public void run_test() {
	
		GLib.stdout.printf("Starting code\n");
	
		test_function.begin( (obj,res) => {
			var val=test_function.end(res);
			GLib.stdout.printf("End callback called %d\n",val);
		});
	
		GLib.stdout.printf("Continuing main function\n");
#if DO_YIELD
		GLib.stdout.printf("Calling test_function.callback\n");
		ext_callback();
		GLib.stdout.printf("Returned from test_function.callback\n");
#endif
	
	}
}

int main(string[] argv) {
	
	
	var tst=new test();
	
	tst.run_test();
	return 0;
}