Ton

Форк
0
/
tc2.fc 
84 строки · 2.1 Кб
1
forall X -> int cast_to_int(X x) asm "NOP";
2
forall X -> builder cast_to_builder(X x) asm "NOP";
3

4
_ test1_body() {
5
  int a = 3;
6
  builder b = begin_cell();
7
  int c = 1;
8
  try {
9
    c = 3;
10
    throw_arg(b, 100);
11
  } catch (x, y) {
12
    return (a + c + y, cast_to_builder(x));
13
  }
14
  return (0, null());
15
}
16

17
() test1() impure {
18
  var (x, y) = test1_body();
19
  throw_unless(101, x == 104);
20
  throw_unless(102, y.builder_refs() == y.builder_bits());
21
}
22

23
_ test2_body(int a, int b, int c) {
24
  try {
25
    try {
26
      try {
27
        try {
28
          throw_arg_if(1, 201, a + b + c == 3);
29
          throw_arg_if(2, 201, a == 3);
30
          throw_arg_unless(1, 202, b == 4);
31
          return 1;
32
        } catch (y, x) {
33
          int y = y.cast_to_int();
34
          throw_arg_unless(y, x, x == 202);
35
          throw_arg(y + 1, 200);
36
        }
37
      } catch (y, x) {
38
        int y = y.cast_to_int();
39
        throw_arg_if(y, x, x == 200);
40
        throw_arg_if(y + 2, x, y < 2);
41
        throw_arg_if(y + 3, 203, a + b + c == 4);
42
        throw_arg_unless(y + 4, 204, b == 4);
43
        return 3;
44
      }
45
    } catch (y, x) {
46
      int y = y.cast_to_int();
47
      try {
48
        throw_arg_if(y, x, x == 200);
49
        throw_arg_if(y + 1, 200, x == 201);
50
        throw_arg_if(x - 203, 200, x == 202);
51
        throw_arg_if(y, 200, x == 203);
52
        throw_arg_if(a + 4, 205, a + b + c == 5);
53
        throw_arg(7, 200);
54
      } catch (v, u) {
55
        int v = v.cast_to_int();
56
        throw_arg_unless(v, u, u == 205);
57
        if (c == 0) {
58
          return b + 4;
59
        }
60
        throw_arg(v + 1, 200);
61
      }
62
    }
63
  } catch (y, x) {
64
    throw_unless(x, x == 200);
65
    return y.cast_to_int();
66
  }
67
  return null();
68
}
69

70
() test2() impure {
71
  throw_unless(201, test2_body(0, 4, 0) == 1);
72
  throw_unless(202, test2_body(0, 5, 0) == 2);
73
  throw_unless(203, test2_body(3, 4, 0) == 3);
74
  throw_unless(204, test2_body(3, 0, 0) == 4);
75
  throw_unless(205, test2_body(3, 1, 0) == 5);
76
  throw_unless(206, test2_body(3, 2, 0) == 6);
77
  throw_unless(207, test2_body(3, 1, 2) == 7);
78
  throw_unless(208, test2_body(3, 1, 1) == 8);
79
}
80

81
() main() {
82
  test1();
83
  test2();
84
}
85

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.