diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 18b5514bac18a1be379884cb52753fabacf674d5..04f69c990e4c06342de86af1524271b29d436c31 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -77,7 +77,7 @@ jobs:
         if: runner.os != 'Windows'
         working-directory: ./build
         run: >
-          ctest -C Debug;
+          ctest -C Debug --rerun-failed --output-on-failure;
           gcovr
           -j ${{env.nproc}}
           --delete
@@ -99,7 +99,7 @@ jobs:
           --export_type cobertura:coverage.xml
           --cover_children
           --
-          ctest -C Debug
+          ctest -C Debug --rerun-failed --output-on-failure;
 
       - name: Publish to codecov
         uses: codecov/codecov-action@v2
diff --git a/cmake/ftxui_test.cmake b/cmake/ftxui_test.cmake
index fd1dd79ecd99cdf676ac816aaf3bedf53b805699..4dafb7c87b618972d890c68c3b75e1e7033efd69 100644
--- a/cmake/ftxui_test.cmake
+++ b/cmake/ftxui_test.cmake
@@ -35,6 +35,7 @@ add_executable(tests
   src/ftxui/dom/blink_test.cpp
   src/ftxui/dom/bold_test.cpp
   src/ftxui/dom/border_test.cpp
+  src/ftxui/dom/canvas_test.cpp
   src/ftxui/dom/separator_test.cpp
   src/ftxui/dom/color_test.cpp
   src/ftxui/dom/dim_test.cpp
diff --git a/src/ftxui/dom/border_test.cpp b/src/ftxui/dom/border_test.cpp
index 153de6be55764942b145e6d11e331d2ddffc01f1..9f1706db498f68a9a9c3d97ece135992b56f969a 100644
--- a/src/ftxui/dom/border_test.cpp
+++ b/src/ftxui/dom/border_test.cpp
@@ -89,6 +89,16 @@ TEST(BorderTest, WithPixel) {
             "ooooo");
 }
 
+TEST(BorderTest, Window) {
+  auto element = window(text("title"), text("content"));
+  Screen screen(10, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "╭title───╮\r\n"
+            "│content │\r\n"
+            "╰────────╯");
+}
+
 } // namespace ftxui
 
 // Copyright 2022 Arthur Sonzogni. All rights reserved.
diff --git a/src/ftxui/dom/canvas_test.cpp b/src/ftxui/dom/canvas_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c31c6d8500a475e1a1754a66dd370ae39e1357ee
--- /dev/null
+++ b/src/ftxui/dom/canvas_test.cpp
@@ -0,0 +1,56 @@
+#include <gtest/gtest-message.h>  // for Message
+#include <gtest/gtest-test-part.h>  // for SuiteApiResolver, TestFactoryImpl, TestPartResult
+#include "gtest/gtest_pred_impl.h"       // for Test, EXPECT_EQ, TEST
+#include <string>                   // for allocator
+#include "ftxui/dom/elements.hpp"        // for text, flexbox
+#include "ftxui/screen/screen.hpp"       // for Screen
+
+namespace ftxui {
+
+namespace {
+int Hash(const std::string s) {
+  int hash = 0;
+  for (auto c : s) {
+    hash += c;
+  }
+  return hash;
+}
+}
+
+TEST(BorderTest, GoldPoint) {
+  Terminal::SetColorSupport(Terminal::Color::TrueColor);
+  auto element = canvas([](Canvas& c) {  //
+    c.DrawPoint(3, 3, 1, Color::Red);
+    c.DrawPointToggle(2, 8);
+    c.DrawPointLine(3, 7, 10, 19, Color::Blue);
+    c.DrawPointCircle(10, 5, 3, Color::Yellow);
+    c.DrawPointCircleFilled(20, 5, 3, Color::Green);
+    c.DrawPointEllipse(10, 10, 5, 2, Color::Blue);
+    c.DrawPointEllipseFilled(10, 20, 5, 2, Color::DarkGreen);
+  });
+  Screen screen(30, 10);
+  Render(screen, element);
+  EXPECT_EQ(Hash(screen.ToString()), 17651);
+}
+
+TEST(BorderTest, GoldBlock) {
+  Terminal::SetColorSupport(Terminal::Color::TrueColor);
+  auto element = canvas([](Canvas& c) {  //
+    c.DrawBlock(3, 3, 1, Color::Red);
+    c.DrawBlockToggle(2, 8);
+    c.DrawBlockLine(3, 7, 10, 19, Color::Blue);
+    c.DrawBlockCircle(10, 5, 3, Color::Yellow);
+    c.DrawBlockCircleFilled(20, 5, 3, Color::Green);
+    c.DrawBlockEllipse(10, 10, 5, 2, Color::Blue);
+    c.DrawBlockEllipseFilled(10, 20, 5, 2, Color::DarkGreen);
+  });
+  Screen screen(30, 10);
+  Render(screen, element);
+  EXPECT_EQ(Hash(screen.ToString()), 14383);
+}
+
+} // namespace ftxui
+
+// Copyright 2022 Arthur Sonzogni. All rights reserved.
+// Use of this source code is governed by the MIT license that can be found in
+// the LICENSE file.
diff --git a/src/ftxui/screen/color.cpp b/src/ftxui/screen/color.cpp
index 33e1d075675d9ceba82d1060c6d2607122145329..2d50125ec3349011c7f8de794d2f036d9929fe41 100644
--- a/src/ftxui/screen/color.cpp
+++ b/src/ftxui/screen/color.cpp
@@ -170,7 +170,8 @@ Color Color::HSV(uint8_t h, uint8_t s, uint8_t v) {
 
 // static
 Color Color::Interpolate(float t, const Color& a, const Color& b) {
-  if (a.type_ == ColorType::Palette1) {
+  if (a.type_ == ColorType::Palette1 ||  //
+      b.type_ == ColorType::Palette1) {
     if (t < 0.5F) {  // NOLINT
       return a;
     } else {
@@ -178,14 +179,6 @@ Color Color::Interpolate(float t, const Color& a, const Color& b) {
     }
   }
 
-  if (b.type_ == ColorType::Palette1) {
-    if (t > 0.5F) {  // NOLINT
-      return a;
-    } else {
-      return b;
-    }
-  }
-
   auto get_color = [](const Color& color,  //
                       uint8_t* red, uint8_t* green, uint8_t* blue) {
     switch (color.type_) {
diff --git a/src/ftxui/screen/color_test.cpp b/src/ftxui/screen/color_test.cpp
index 07c771d69e2ab8afeaaf25b99a97d34a7053d09a..bcceeec0091e89483b824088b0667eab6d2ece72 100644
--- a/src/ftxui/screen/color_test.cpp
+++ b/src/ftxui/screen/color_test.cpp
@@ -40,6 +40,48 @@ TEST(ColorTest, FallbackTo16) {
   EXPECT_EQ(Color::RGB(1,2,3).Print(false), "30");
 }
 
+TEST(ColorTest, Litterals) {
+  Terminal::SetColorSupport(Terminal::Color::TrueColor);
+  using namespace ftxui::literals;
+  EXPECT_EQ(Color(0xABCDEF_rgb).Print(false), "38;2;171;205;239");
+}
+
+TEST(ColorTest, Interpolate) {
+  Terminal::SetColorSupport(Terminal::Color::TrueColor);
+
+  EXPECT_EQ(Color::Interpolate(0.3f, Color(), Color()).Print(false), "39");
+  EXPECT_EQ(Color::Interpolate(0.3f, Color::Red, Color()).Print(false), "31");
+  EXPECT_EQ(Color::Interpolate(0.7f, Color::Red, Color()).Print(false), "39");
+  EXPECT_EQ(Color::Interpolate(0.3f, Color(), Color::Red).Print(false), "39");
+  EXPECT_EQ(Color::Interpolate(0.7f, Color(), Color::Red).Print(false), "31");
+
+  EXPECT_EQ(Color::Interpolate(0.3f,                       //
+                               Color::RGB(1, 2, 3),        //
+                               Color::RGB(244, 244, 123))  //
+                .Print(false),
+            "38;2;73;74;39");
+  EXPECT_EQ(Color::Interpolate(0.7f,                       //
+                               Color::RGB(1, 2, 3),        //
+                               Color::RGB(244, 244, 123))  //
+                .Print(false),
+            "38;2;171;171;87");
+  EXPECT_EQ(Color::Interpolate(0.7f,                       //
+                               Color(Color::Red),          //
+                               Color::RGB(244, 244, 123))  //
+                .Print(false),
+            "38;2;209;170;86");
+  EXPECT_EQ(Color::Interpolate(0.7f,                       //
+                               Color::RGB(244, 244, 123),  //
+                               Color(Color::Plum1))        //
+                .Print(false),
+            "38;2;251;195;215");
+}
+
+TEST(ColorTest, HSV) {
+  Terminal::SetColorSupport(Terminal::Color::TrueColor);
+  EXPECT_EQ(Color::HSV(0, 255, 255).Print(false), "38;2;255;0;0");
+}
+
 }  // namespace ftxui
 
 // Copyright 2022 Arthur Sonzogni. All rights reserved.