In what way do you see limits being ignored?  There are 5 cases which tests cover:
1) len(xab) == 1 (add x to free symbols)
2) len(xab) == 3 with a == b (return 0)
3) len(xab) == 3 and x not in free symbols (add (a-b).free_symbols)
4) len(xab) == 3 and x in free symbols (remove x from isym and add a.free_symbols and b.free_symbols)
5) len(xab) == 2 (remove x from isym if there and add a.free_symbols)

case 1
```
            if len(xab) == 1:
                isyms.add(xab[0])
                continue  # it may be removed later
```
case 2
```
            if len(xab) == 3 and xab[1] == xab[2]:
                return True
```
case 4 and 5-when x in isyms
```
            if xab[0] in isyms:
                isyms.remove(xab[0])
                for i in xab[1:]:
                    isyms.update(i.free_symbols)
```
case 3
```
            elif len(xab) == 3:
                a, b = xab[1:]
                isyms.update((b - a).free_symbols)
```
case 5 when x is not in isym
```
            else:
                isyms.update(xab[1].free_symbols)
```