#include<assert.h>

int n = 10;

struct T2 {
  double a[n];
};

struct T {
  int a;
  int b;
  struct {
    int c;
  };
  struct T2 d[10];
  $domain(1) e[2];
  union T3 {
    int f;
    int g;
    char * h;
  } u;
};


int main() {
  $range r = 0 .. 2;
  struct T t = {1, 2, .e={($domain){r}, ($domain){r}}, {.h="abc"}};

  assert(t.a == 1);
  assert(t.b == 2);
  assert($forall (int i : 0 .. 9) 
	 $forall (int j : 0 .. n-1) 
	 t.d[i].a[j] == 0);
  assert(t.u.h[0] == 'a' && t.u.h[1] == 'b' && t.u.h[2] == 'c' && 
	 t.u.h[3] == 0);
  return 0;
}
