// File: /workspace/github_cpp_makefile_star2_O1/elarielcl[P]ArielsSequitur/TestSequitur.cpp
// Function: main
int main() {
  vector<char*> v;
  vector <char*> :: iterator s;

  v.push_back((char*)"abcdbcabcd");
  v.push_back((char*)"cdddcdaddcd");
  v.push_back((char*)"cdddcdaddcdcdddcdaddcdcdddcdaddcdcdddcdaddcdcdddcdaddcdcdddcdaddcdcdddcdaddcdcdddcdaddcd");
  v.push_back((char*)"aaaaaaaaaaaaaaaaaaaaaaaa");
  v.push_back((char*)"ababababababababab");

  cout << "SIMPLE TEST" << endl << "=====================================" << endl << endl;
  for (s = v.begin(); s != v.end(); ++s)
    simpleTest(*s);

  vector<int> nOR;
  nOR.push_back(3);
  nOR.push_back(3);
  nOR.push_back(6);
  nOR.push_back(4);
  nOR.push_back(4); // Precomputed Values
  cout << "GRAMMAR SIZE TEST" << endl << "=====================================" << endl << endl;
  for (int i = 0; i < nOR.size(); ++i)
    numberOfRulesTest(v[i], nOR[i]);


  vector<int> sizes;
  sizes.push_back(8);
  sizes.push_back(9);
  sizes.push_back(15);
  sizes.push_back(9);
  sizes.push_back(9); // Precomputed Values
  cout << "GRAMMAR SIZE TEST" << endl << "=====================================" << endl << endl;
  for (int i = 0; i < sizes.size(); ++i)
    grammarSizeTest(v[i], sizes[i]);

  cout << "RULE USAGE TEST" << endl << "=====================================" << endl << endl;
  for (s = v.begin(); s != v.end(); ++s)
    ruleUsageTest(*s);

  cout << "DIGRAM UNIQUENESS TEST" << endl << "=====================================" << endl << endl;
  for (s = v.begin(); s != v.end(); ++s)
    digramUniquenessTest(*s);

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x68, %rsp
xorps %xmm0, %xmm0
leaq -0x70(%rbp), %rdi
movaps %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
leaq 0x3b66(%rip), %rax      # 0x6004
leaq -0x50(%rbp), %rsi
movq %rax, (%rsi)
callq 0x3be6
leaq 0x3bab(%rip), %rax      # 0x605c
leaq -0x50(%rbp), %rsi
movq %rax, (%rsi)
leaq -0x70(%rbp), %rdi
callq 0x3be6
leaq 0x3b47(%rip), %rax      # 0x600f
leaq -0x50(%rbp), %rsi
movq %rax, (%rsi)
leaq -0x70(%rbp), %rdi
callq 0x3be6
leaq 0x3b89(%rip), %rax      # 0x6068
leaq -0x50(%rbp), %rsi
movq %rax, (%rsi)
leaq -0x70(%rbp), %rdi
callq 0x3be6
leaq 0x3b8b(%rip), %rax      # 0x6081
leaq -0x50(%rbp), %rsi
movq %rax, (%rsi)
leaq -0x70(%rbp), %rdi
callq 0x3be6
movq 0x6acb(%rip), %rbx      # 0x8fd8
leaq 0x3b80(%rip), %rsi      # 0x6094
movl $0xb, %edx
movq %rbx, %rdi
callq 0x2190
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6a99(%rip), %rdi      # 0x8fd8
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq %rax, %rbx
leaq 0x3b4a(%rip), %rsi      # 0x60a0
movl $0x25, %edx
movq %rax, %rdi
callq 0x2190
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq -0x70(%rbp), %rbx
cmpq -0x68(%rbp), %rbx
je 0x25cc
movq (%rbx), %rdi
callq 0x2bc6
addq $0x8, %rbx
jmp 0x25b8
xorps %xmm0, %xmm0
movaps %xmm0, -0x50(%rbp)
movq $0x0, -0x40(%rbp)
movl $0x3, -0x30(%rbp)
movq -0x48(%rbp), %rsi
testq %rsi, %rsi
je 0x25fb
movl $0x3, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x48(%rbp)
jmp 0x2608
leaq -0x50(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x3d60
movl $0x3, -0x30(%rbp)
movq -0x48(%rbp), %rsi
cmpq -0x40(%rbp), %rsi
je 0x2629
movl $0x3, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x48(%rbp)
jmp 0x2636
leaq -0x50(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x3d60
movl $0x6, -0x30(%rbp)
movq -0x48(%rbp), %rsi
cmpq -0x40(%rbp), %rsi
je 0x2657
movl $0x6, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x48(%rbp)
jmp 0x2664
leaq -0x50(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x3d60
movl $0x4, -0x30(%rbp)
movq -0x48(%rbp), %rsi
cmpq -0x40(%rbp), %rsi
je 0x2685
movl $0x4, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x48(%rbp)
jmp 0x2692
leaq -0x50(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x3d60
movl $0x4, -0x30(%rbp)
movq -0x48(%rbp), %rsi
cmpq -0x40(%rbp), %rsi
je 0x26b3
movl $0x4, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x48(%rbp)
jmp 0x26c0
leaq -0x50(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x3d60
movq 0x6911(%rip), %rbx      # 0x8fd8
leaq 0x39f8(%rip), %rsi      # 0x60c6
movl $0x11, %edx
movq %rbx, %rdi
callq 0x2190
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x68df(%rip), %rdi      # 0x8fd8
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq %rax, %rbx
leaq 0x3990(%rip), %rsi      # 0x60a0
movl $0x25, %edx
movq %rax, %rdi
callq 0x2190
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq -0x50(%rbp), %rax
cmpq %rax, -0x48(%rbp)
je 0x27a1
xorl %ebx, %ebx
movq -0x70(%rbp), %rcx
movq (%rcx,%rbx,8), %rdi
movl (%rax,%rbx,4), %esi
callq 0x2e8b
incq %rbx
movq -0x50(%rbp), %rax
movq -0x48(%rbp), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rbx, %rcx
ja 0x277a
xorps %xmm0, %xmm0
movaps %xmm0, -0x30(%rbp)
movq $0x0, -0x20(%rbp)
movl $0x8, -0xc(%rbp)
movq -0x28(%rbp), %rsi
testq %rsi, %rsi
je 0x27d0
movl $0x8, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x28(%rbp)
jmp 0x27dd
leaq -0x30(%rbp), %rdi
leaq -0xc(%rbp), %rdx
callq 0x3d60
movl $0x9, -0xc(%rbp)
movq -0x28(%rbp), %rsi
cmpq -0x20(%rbp), %rsi
je 0x27fe
movl $0x9, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x28(%rbp)
jmp 0x280b
leaq -0x30(%rbp), %rdi
leaq -0xc(%rbp), %rdx
callq 0x3d60
movl $0xf, -0xc(%rbp)
movq -0x28(%rbp), %rsi
cmpq -0x20(%rbp), %rsi
je 0x282c
movl $0xf, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x28(%rbp)
jmp 0x2839
leaq -0x30(%rbp), %rdi
leaq -0xc(%rbp), %rdx
callq 0x3d60
movl $0x9, -0xc(%rbp)
movq -0x28(%rbp), %rsi
cmpq -0x20(%rbp), %rsi
je 0x285a
movl $0x9, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x28(%rbp)
jmp 0x2867
leaq -0x30(%rbp), %rdi
leaq -0xc(%rbp), %rdx
callq 0x3d60
movl $0x9, -0xc(%rbp)
movq -0x28(%rbp), %rsi
cmpq -0x20(%rbp), %rsi
je 0x2888
movl $0x9, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x28(%rbp)
jmp 0x2895
leaq -0x30(%rbp), %rdi
leaq -0xc(%rbp), %rdx
callq 0x3d60
movq 0x673c(%rip), %rbx      # 0x8fd8
leaq 0x3823(%rip), %rsi      # 0x60c6
movl $0x11, %edx
movq %rbx, %rdi
callq 0x2190
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x670a(%rip), %rdi      # 0x8fd8
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq %rax, %rbx
leaq 0x37bb(%rip), %rsi      # 0x60a0
movl $0x25, %edx
movq %rax, %rdi
callq 0x2190
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq -0x30(%rbp), %rax
cmpq %rax, -0x28(%rbp)
je 0x2976
xorl %ebx, %ebx
movq -0x70(%rbp), %rcx
movq (%rcx,%rbx,8), %rdi
movl (%rax,%rbx,4), %esi
callq 0x307a
incq %rbx
movq -0x30(%rbp), %rax
movq -0x28(%rbp), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rbx, %rcx
ja 0x294f
movq 0x665b(%rip), %rbx      # 0x8fd8
leaq 0x3754(%rip), %rsi      # 0x60d8
movl $0xf, %edx
movq %rbx, %rdi
callq 0x2190
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6629(%rip), %rdi      # 0x8fd8
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq %rax, %rbx
leaq 0x36da(%rip), %rsi      # 0x60a0
movl $0x25, %edx
movq %rax, %rdi
callq 0x2190
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq -0x70(%rbp), %rbx
cmpq -0x68(%rbp), %rbx
je 0x2a3c
movq (%rbx), %rdi
callq 0x3269
addq $0x8, %rbx
jmp 0x2a28
movq 0x6595(%rip), %rbx      # 0x8fd8
leaq 0x369e(%rip), %rsi      # 0x60e8
movl $0x16, %edx
movq %rbx, %rdi
callq 0x2190
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0x6563(%rip), %rdi      # 0x8fd8
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq %rax, %rbx
leaq 0x3614(%rip), %rsi      # 0x60a0
movl $0x25, %edx
movq %rax, %rdi
callq 0x2190
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x20d0
movq -0x70(%rbp), %rbx
cmpq -0x68(%rbp), %rbx
je 0x2b02
movq (%rbx), %rdi
callq 0x36cd
addq $0x8, %rbx
jmp 0x2aee
movq -0x30(%rbp), %rdi
testq %rdi, %rdi
je 0x2b17
movq -0x20(%rbp), %rsi
subq %rdi, %rsi
callq 0x2170
movq -0x50(%rbp), %rdi
testq %rdi, %rdi
je 0x2b2c
movq -0x40(%rbp), %rsi
subq %rdi, %rsi
callq 0x2170
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x2b41
movq -0x60(%rbp), %rsi
subq %rdi, %rsi
callq 0x2170
xorl %eax, %eax
addq $0x68, %rsp
popq %rbx
popq %rbp
retq
jmp 0x2b7c
jmp 0x2b7c
jmp 0x2b7c
jmp 0x2b7c
jmp 0x2b7c
jmp 0x2b72
jmp 0x2b72
jmp 0x2b72
jmp 0x2b72
jmp 0x2b72
jmp 0x2b77
jmp 0x2b77
jmp 0x2b77
jmp 0x2b77
jmp 0x2b77
jmp 0x2b72
jmp 0x2b77
jmp 0x2b7c
jmp 0x2b7c
jmp 0x2b7c
movq %rax, %rbx
jmp 0x2b94
movq %rax, %rbx
jmp 0x2ba9
movq %rax, %rbx
movq -0x30(%rbp), %rdi
testq %rdi, %rdi
je 0x2b94
movq -0x20(%rbp), %rsi
subq %rdi, %rsi
callq 0x2170
movq -0x50(%rbp), %rdi
testq %rdi, %rdi
je 0x2ba9
movq -0x40(%rbp), %rsi
subq %rdi, %rsi
callq 0x2170
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x2bbe
movq -0x60(%rbp), %rsi
subq %rdi, %rsi
callq 0x2170
movq %rbx, %rdi
callq 0x2210