/ tests / tests / compiler / futures / explicit_type_simple.adl
explicit_type_simple.adl
 1  program test.alpha {
 2      mapping foo: u32 => u32;
 3      async transition main_inner(public a: u32, b: u32) -> (u32, Future<Fn(u32)>) {
 4          let c: u32 = a + b;
 5          let f: Future<Fn(u32)> = finalize(1u32);
 6          return (c, f);
 7      }
 8  
 9      async function finalize(a:u32) {
10          Mapping::set(foo, a, 1u32);
11      }
12  }
13  
14  // --- Next Program --- //
15  
16  import test.alpha;
17  program basic.alpha {
18      async transition main(public a: u32, b: u32) -> (u32, Future<Fn(u32, u32, Future<Fn(u32)>)>) {
19          let c: u32 = a + b;
20          let (d, f1): (u32, Future<Fn(u32)>) = test.alpha/main_inner(1u32, 1u32);
21          let f:Future<Fn(u32, u32, Future<Fn(u32)>)> = finalize(a, c, f1);
22          return (c,f);
23      }
24  
25      async function finalize(a: u32, b:u32, f: Future<Fn(u32)>) {
26          f.await();
27          assert_eq(a, b);
28      }
29  }