# 17.17. Over-Constrained Code¶

## 17.17.1. Over-Constrained Code¶

### 17.17.1.1. Over-constrained Code (1)¶

Consider the situation where we have two points. We want to know which quadrant the second point (b) is in w.r.t. the first point (a):

if ((b.x < a.x) && (b.y < a.y)) doNW(); else if ((b.x < a.x) && (b.y >= a.y)) doSW(); else if ((b.x >= a.x) && (b.y < a.y)) doNE(); else if ((b.x >= a.x) && (b.y >= a.y)) doSE();This has the virtue of being quite logical and clear. However, it has some problems.

### 17.17.1.2. Over-constrained Code (2)¶

It is horribly inefficient, compared to alternatives.

But our real concern has to do with testing and code coverage.

Fact: No series of tests will cover all branches in this code.

Q: Why?

A: Consider every possible branch and see what can get triggered. Consider that there have to be at least 8+ branches, and only 4 possible inputs!!

Try to hit every branch by brute force, one at a time…

### 17.17.1.3. Over-constrained Code (3)¶

Q: If we want complete code coverage when there are only four logically distinct inputs, then we had better do what?

A: Come up with code that has only four branches!

### 17.17.1.4. Over-constrained Code (4)¶

Refactored code:

if (b.x < a.x) if (b.y < a.y) doNW(); else doSW(); else if (b.y < a.y) doNE(); else doSE();Not only can you test every branch, but this is a lot more efficient! Every branch requires 2 tests!