<!DOCTYPE html>
<meta charset="utf-8" />
<title>CSS Reftest Reference</title>
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" />
<style>
.test {
  display: block;
  overflow: hidden;
  width: 300px;
}
.inline {
  display: inline;
}
.float, .clear {
  display: block;
  overflow: hidden;
  height: 3px;
  width: 100px;
  background: #f0f;
}
.clear {
  background: #0ff;
}
</style>
<body>
<script>
function physicalValue(value, containerDirection) {
  return ((value === "inline-start") === (containerDirection === "ltr")) ? "left" : "right";
}
const sides = ["inline-start", "inline-end"];
const directions = ["ltr", "rtl"];
for (const floatSide of sides) {
  for (const clearSide of sides) {
    for (const containerDirection of directions) {
      for (const inlineParentDirection of [null, ...directions]) {
        for (const floatDirection of directions) {
          for (const clearDirection of directions) {
            const containerEl = document.createElement("div");
            containerEl.className = "test";
            containerEl.style.direction = containerDirection;
            const floatEl = document.createElement("div");
            floatEl.className = "float";
            floatEl.style.direction = floatDirection;
            floatEl.style.float = physicalValue(floatSide, containerDirection);
            const clearEl = document.createElement("div");
            clearEl.className = "clear";
            clearEl.style.direction = floatDirection;
            clearEl.style.clear = physicalValue(clearSide, containerDirection);
            if (inlineParentDirection) {
              const inlineParent = document.createElement("div");
              inlineParent.className = "inline";
              inlineParent.style.direction = inlineParentDirection;
              inlineParent.appendChild(floatEl);
              inlineParent.appendChild(clearEl);
              containerEl.appendChild(inlineParent);
            } else {
              containerEl.appendChild(floatEl);
              containerEl.appendChild(clearEl);
            }
            document.body.appendChild(containerEl);
          }
        }
      }
    }
  }
}
</script>
</body>
