     
     func verifyConstraints(log log: Bool = false) {
         // Force constraints to be created
+        uiStackView.setNeedsUpdateConstraints()
         uiStackView.updateConstraintsIfNeeded()
+        uiStackView.setNeedsLayout()
         uiStackView.layoutIfNeeded()
+        
+        tzStackView.setNeedsUpdateConstraints()
         tzStackView.updateConstraintsIfNeeded()
+        tzStackView.setNeedsLayout()
         tzStackView.layoutIfNeeded()
 
         if log {

    }
    
    private func isSameConstraintFlipped(layoutConstraint1: NSLayoutConstraint, _ layoutConstraint2: NSLayoutConstraint) -> Bool {
        if !viewsEqual(layoutConstraint1.firstItem, layoutConstraint2.secondItem) {
            return false
        }
        if !viewsEqual(layoutConstraint1.secondItem, layoutConstraint2.firstItem) {
            return false
        }
        if layoutConstraint1.firstAttribute != layoutConstraint2.secondAttribute {
            return false
        }
        if layoutConstraint1.secondAttribute != layoutConstraint2.firstAttribute {
            return false
        }
        if !isSameIdentifier(layoutConstraint1.identifier, layoutConstraint2.identifier) {
            return false
        }
        return true
    }

    private func printConstraints(constraints: [NSLayoutConstraint]) {

        for (index, uiConstraint) in uiConstraints.enumerate() {
            let tzConstraint = tzConstraints[index]
            
            let result = isSameConstraint(uiConstraint, tzConstraint) || isSameConstraintFlipped(uiConstraint, tzConstraint)
            
            XCTAssertTrue(result, "Constraints at index \(index) do not match\n== EXPECTED ==\n\(uiConstraint.readableString())\n\n== ACTUAL ==\n\(tzConstraint.readableString())\n\n")
        }
    }
    
    private func isSameConstraint(layoutConstraint1: NSLayoutConstraint, _ layoutConstraint2: NSLayoutConstraint) -> Bool {
