changeset 1887:24590890e124 allocation_testing

Refactor a little bit
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 07 Apr 2022 17:02:51 +0200
parents 9ce6d939dfae
children eb70a0941cd6
files test/SbpOperators/allocations_test.jl
diffstat 1 files changed, 100 insertions(+), 206 deletions(-) [+]
line wrap: on
line diff
--- a/test/SbpOperators/allocations_test.jl	Thu Apr 07 07:37:02 2022 +0200
+++ b/test/SbpOperators/allocations_test.jl	Thu Apr 07 17:02:51 2022 +0200
@@ -24,72 +24,33 @@
         dᵣ = normal_derivative(g₁, stencil_set, CartesianBoundary{1,Upper}())
 
 
+        indices = [1, 6, 15]
 
-        @testset "Derivative operator" begin
-            v = rand(size(g₁)...)
-            @test (@ballocated LazyTensors.apply($D₂, $v, 1)) == 0
-            @test (@ballocated LazyTensors.apply($D₂, $v, 6)) == 0
-            @test (@ballocated LazyTensors.apply($D₂, $v, 15)) == 0
-        end
+        v = rand(size(g₁)...)
+        u = fill(1.)
 
-        @testset "inner_product operator" begin
-            v = rand(size(g₁)...)
+        neumannSATₗ = H⁻¹∘eₗ'∘dₗ # TODO: Remove
+        neumannSATᵣ = H⁻¹∘eᵣ'∘dᵣ # TODO: Remove
 
-            @test (@ballocated LazyTensors.apply($H, $v, 1)) == 0
-            @test (@ballocated LazyTensors.apply($H, $v, 6)) == 0
-            @test (@ballocated LazyTensors.apply($H, $v, 15)) == 0
-
-            @test (@ballocated LazyTensors.apply($(H∘H), $v, 5)) == 0
-        end
-
-        @testset "inverse_inner_product operator" begin
-              v = rand(size(g₁)...)
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 1)) == 0
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 6)) == 0
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 15)) == 0
+        @testset for i ∈ indices
+            @test (@ballocated LazyTensors.apply($D₂, $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($H, $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($(H∘H), $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($H⁻¹, $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($eₗ', $u, $i)) == 0
+            @test (@ballocated LazyTensors.apply($eᵣ', $u, $i)) == 0
+            @test (@ballocated LazyTensors.apply($dₗ', $u, $i)) == 0
+            @test (@ballocated LazyTensors.apply($dᵣ', $u, $i)) == 0
+            @test (@ballocated LazyTensors.apply($neumannSATₗ, $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($neumannSATᵣ, $v, $i)) == 0
         end
 
         @testset "boundary operators" begin
-            v = rand(size(g₁)...)
             @test (@ballocated LazyTensors.apply($eₗ, $v)) == 0
             @test (@ballocated LazyTensors.apply($eᵣ, $v)) == 0
             @test (@ballocated LazyTensors.apply($dₗ, $v)) == 0
             @test (@ballocated LazyTensors.apply($dᵣ, $v)) == 0
         end
-
-        @testset "boundary operator transposes" begin
-            v = fill(1.)
-            @test (@ballocated LazyTensors.apply($eₗ', $v, 1)) == 0
-            @test (@ballocated LazyTensors.apply($eₗ', $v, 7)) == 0
-            @test (@ballocated LazyTensors.apply($eₗ', $v, 15)) == 0
-
-            @test (@ballocated LazyTensors.apply($eᵣ', $v, 1)) == 0
-            @test (@ballocated LazyTensors.apply($eᵣ', $v, 7)) == 0
-            @test (@ballocated LazyTensors.apply($eᵣ', $v, 15)) == 0
-
-            @test (@ballocated LazyTensors.apply($dₗ', $v, 1)) == 0
-            @test (@ballocated LazyTensors.apply($dₗ', $v, 7)) == 0
-            @test (@ballocated LazyTensors.apply($dₗ', $v, 15)) == 0
-
-            @test (@ballocated LazyTensors.apply($dᵣ', $v, 1)) == 0
-            @test (@ballocated LazyTensors.apply($dᵣ', $v, 7)) == 0
-            @test (@ballocated LazyTensors.apply($dᵣ', $v, 15)) == 0
-        end
-
-        @testset "sat terms" begin
-            v = rand(size(g₁)...)
-            neumannSATₗ = H⁻¹∘eₗ'∘dₗ
-            neumannSATᵣ = H⁻¹∘eᵣ'∘dᵣ
-
-
-            @test (@ballocated LazyTensors.apply($neumannSATₗ, $v, 1)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSATₗ, $v, 6)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSATₗ, $v, 15)) == 0
-
-            @test (@ballocated LazyTensors.apply($neumannSATᵣ, $v, 1)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSATᵣ, $v, 6)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSATᵣ, $v, 15)) == 0
-        end
     end
 
 
@@ -117,171 +78,104 @@
         H₂ᵤ = inner_product(boundary_grid(g₂, CartesianBoundary{2,Upper}()), stencil_set)
 
 
-        @testset "Derivative operator" begin
-            v = rand(size(g₂)...)
-            @test (@ballocated LazyTensors.apply($D₂x, $v,  1,  7)) == 0
-            @test (@ballocated LazyTensors.apply($D₂x, $v,  6,  7)) == 0
-            @test (@ballocated LazyTensors.apply($D₂x, $v, 15,  7)) == 0
+        # neumannSAT₁ₗ = H⁻¹∘e₁ₗ'∘H₁ₗ∘d₁ₗ
+        # neumannSAT₂ᵤ = H⁻¹∘e₂ᵤ'∘H₂ᵤ∘d₂ᵤ
 
-            @test (@ballocated LazyTensors.apply($D₂y, $v,  7,  1)) == 0
-            @test (@ballocated LazyTensors.apply($D₂y, $v,  7,  6)) == 0
-            @test (@ballocated LazyTensors.apply($D₂y, $v,  7, 15)) == 0
+        neumannSAT₁ₗ = e₁ₗ'∘d₁ₗ # TODO: Remove
+        neumannSAT₂ᵤ = e₂ᵤ'∘d₂ᵤ # TODO: Remove
+
+        indices = [1,6,15]
+
+        v = rand(size(g₂)...)
+        u = rand(first(size(g₂)))
 
-            @test (@ballocated LazyTensors.apply($(D₂x∘D₂y), $v,   1,  1)) == 0
-            @test (@ballocated LazyTensors.apply($(D₂x∘D₂y), $v,   7,  6)) == 0
-            @test (@ballocated LazyTensors.apply($(D₂x∘D₂y), $v,  15, 15)) == 0
-        end
+        @testset for i ∈ indices
+            @testset for j ∈ indices
+                @test (@ballocated LazyTensors.apply($D₂x, $v,  $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($D₂y, $v,  $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($(D₂x∘D₂y), $v, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($H, $v, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($(H∘H), $v, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($H⁻¹, $v, $i, $j)) == 0
 
-        @testset "inner_product operator" begin
-            v = rand(size(g₂)...)
-            @test (@ballocated LazyTensors.apply($H, $v, 1,  1)) == 0
-            @test (@ballocated LazyTensors.apply($H, $v, 1,  6)) == 0
-            @test (@ballocated LazyTensors.apply($H, $v, 1, 15)) == 0
-            @test (@ballocated LazyTensors.apply($H, $v, 6,  1)) == 0
-            @test (@ballocated LazyTensors.apply($H, $v, 6,  6)) == 0
-            @test (@ballocated LazyTensors.apply($H, $v, 6, 15)) == 0
-            @test (@ballocated LazyTensors.apply($H, $v, 15,  1)) == 0
-            @test (@ballocated LazyTensors.apply($H, $v, 15,  6)) == 0
-            @test (@ballocated LazyTensors.apply($H, $v, 15, 15)) == 0
+                @test (@ballocated LazyTensors.apply($e₁ₗ', $u, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($e₁ᵤ', $u, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($e₂ₗ', $u, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($e₂ᵤ', $u, $i, $j)) == 0
+
+                @test (@ballocated LazyTensors.apply($d₁ₗ', $u, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($d₁ᵤ', $u, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($d₂ₗ', $u, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($d₂ᵤ', $u, $i, $j)) == 0
+
+                @test (@ballocated LazyTensors.apply($neumannSAT₁ₗ, $v,  $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($neumannSAT₂ᵤ, $v,  $i, $j)) == 0
+
 
 
-            @test (@ballocated LazyTensors.apply($(H∘H), $v, 5, 5)) == 0
-        end
-
-        @testset "inverse_inner_product operator" begin
-            v = rand(size(g₂)...)
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 1,  1)) == 0
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 1,  6)) == 0
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 1, 15)) == 0
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 6,  1)) == 0
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 6,  6)) == 0
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 6, 15)) == 0
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 15,  1)) == 0
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 15,  6)) == 0
-            @test (@ballocated LazyTensors.apply($H⁻¹, $v, 15, 15)) == 0
-        end
-
-        @testset "boundary operators" begin
-            v = rand(size(g₂)...)
-            @test (@ballocated LazyTensors.apply($e₁ₗ, $v,  1)) == 0
-            @test (@ballocated LazyTensors.apply($e₁ᵤ, $v,  5)) == 0
-            @test (@ballocated LazyTensors.apply($e₂ₗ, $v, 15)) == 0
-            @test (@ballocated LazyTensors.apply($e₂ᵤ, $v,  3)) == 0
-
-            @test (@ballocated LazyTensors.apply($d₁ₗ, $v,  5)) == 0
-            @test (@ballocated LazyTensors.apply($d₁ᵤ, $v, 15)) == 0
-            @test (@ballocated LazyTensors.apply($d₂ₗ, $v,  1)) == 0
-            @test (@ballocated LazyTensors.apply($d₂ᵤ, $v,  5)) == 0
-        end
-
-        @testset "boundary operator transposes" begin
-            v = rand(first(size(g₂)))
-
-            @test (@ballocated LazyTensors.apply($e₁ₗ', $v, 1,  1)) == 0
-            @test (@ballocated LazyTensors.apply($e₁ₗ', $v, 1,  6)) == 0
-            @test (@ballocated LazyTensors.apply($e₁ₗ', $v, 1, 15)) == 0
-            @test (@ballocated LazyTensors.apply($e₁ₗ', $v, 6,  1)) == 0
-            @test (@ballocated LazyTensors.apply($e₁ₗ', $v, 6,  6)) == 0
-            @test (@ballocated LazyTensors.apply($e₁ₗ', $v, 6, 15)) == 0
-            @test (@ballocated LazyTensors.apply($e₁ₗ', $v, 15,  1)) == 0
-            @test (@ballocated LazyTensors.apply($e₁ₗ', $v, 15,  6)) == 0
-            @test (@ballocated LazyTensors.apply($e₁ₗ', $v, 15, 15)) == 0
+                ## Experiments
+                @test        (@ballocated LazyTensors.apply($(e₁ₗ'∘d₁ₗ),         $v, $i, $j)) == 0
+                @test        (@ballocated LazyTensors.apply($(d₁ₗ'∘e₁ₗ),         $v, $i, $j)) == 0
 
-            @test (@ballocated LazyTensors.apply($d₂ᵤ', $v, 1,  1)) == 0
-            @test (@ballocated LazyTensors.apply($d₂ᵤ', $v, 1,  6)) == 0
-            @test (@ballocated LazyTensors.apply($d₂ᵤ', $v, 1, 15)) == 0
-            @test (@ballocated LazyTensors.apply($d₂ᵤ', $v, 6,  1)) == 0
-            @test (@ballocated LazyTensors.apply($d₂ᵤ', $v, 6,  6)) == 0
-            @test (@ballocated LazyTensors.apply($d₂ᵤ', $v, 6, 15)) == 0
-            @test (@ballocated LazyTensors.apply($d₂ᵤ', $v, 15,  1)) == 0
-            @test (@ballocated LazyTensors.apply($d₂ᵤ', $v, 15,  6)) == 0
-            @test (@ballocated LazyTensors.apply($d₂ᵤ', $v, 15, 15)) == 0
-        end
-
-        @testset "sat terms" begin
-            v = rand(size(g₂)...)
-            u = rand(size(g₂)[1])
-            # neumannSAT₁ₗ = H⁻¹∘e₁ₗ'∘H₁ₗ∘d₁ₗ
-            # neumannSAT₂ᵤ = H⁻¹∘e₂ᵤ'∘H₂ᵤ∘d₂ᵤ
-
-            neumannSAT₁ₗ = e₁ₗ'∘d₁ₗ
-            neumannSAT₂ᵤ = e₂ᵤ'∘d₂ᵤ
-
-            # indices = [1,6,15]
-            indices = [1]
+                @test_broken (@ballocated LazyTensors.apply($(H⁻¹∘e₁ₗ'∘H₁ₗ∘d₁ₗ), $v, $i, $j)) == 0
+                @test_broken (@ballocated LazyTensors.apply($(e₁ₗ'∘H₁ₗ∘d₁ₗ∘H⁻¹), $v, $i, $j)) == 0
+                @test        (@ballocated LazyTensors.apply($(e₁ₗ'∘H₁ₗ∘d₁ₗ),     $v, $i, $j)) == 0
+                @test_broken (@ballocated LazyTensors.apply($(H⁻¹∘e₁ₗ'∘d₁ₗ),     $v, $i, $j)) == 0
+                @test        (@ballocated LazyTensors.apply($(H⁻¹∘D₂x),          $v, $i, $j)) == 0
+                @test        (@ballocated LazyTensors.apply($(H⁻¹∘D₂y),          $v, $i, $j)) == 0
+                @test_broken (@ballocated LazyTensors.apply($(H⁻¹∘D₂x∘D₂y),      $v, $i, $j)) == 0
+                @test_broken (@ballocated LazyTensors.apply($(D₂x∘e₁ₗ'∘H₁ₗ∘d₁ₗ), $v, $i, $j)) == 0
+                @test_broken (@ballocated LazyTensors.apply($(D₂y∘e₁ₗ'∘H₁ₗ∘d₁ₗ), $v, $i, $j)) == 0
+                @test        (@ballocated LazyTensors.apply($(D₂x∘e₁ₗ'∘d₁ₗ),     $v, $i, $j)) == 0
+                @test        (@ballocated LazyTensors.apply($(D₂y∘e₁ₗ'∘d₁ₗ),     $v, $i, $j)) == 0
 
-            @testset for i ∈ indices
-                @testset for j ∈ indices
-                    @test        (@ballocated LazyTensors.apply($(e₁ₗ'∘d₁ₗ),         $v, $i, $j)) == 0
-                    @test        (@ballocated LazyTensors.apply($(d₁ₗ'∘e₁ₗ),         $v, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($(H⁻¹∘e₁ₗ'), $u, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($(e₁ₗ'∘H₁ₗ), $u, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($(H₁ₗ∘d₁ₗ),  $v, $i)) == 0
 
-                    @test_broken (@ballocated LazyTensors.apply($(H⁻¹∘e₁ₗ'∘H₁ₗ∘d₁ₗ), $v, $i, $j)) == 0
-                    @test_broken (@ballocated LazyTensors.apply($(e₁ₗ'∘H₁ₗ∘d₁ₗ∘H⁻¹), $v, $i, $j)) == 0
-                    @test        (@ballocated LazyTensors.apply($(e₁ₗ'∘H₁ₗ∘d₁ₗ),     $v, $i, $j)) == 0
-                    @test_broken (@ballocated LazyTensors.apply($(H⁻¹∘e₁ₗ'∘d₁ₗ),     $v, $i, $j)) == 0
-                    @test        (@ballocated LazyTensors.apply($(H⁻¹∘D₂x),          $v, $i, $j)) == 0
-                    @test        (@ballocated LazyTensors.apply($(H⁻¹∘D₂y),          $v, $i, $j)) == 0
-                    @test_broken (@ballocated LazyTensors.apply($(H⁻¹∘D₂x∘D₂y),      $v, $i, $j)) == 0
-                    @test_broken (@ballocated LazyTensors.apply($(D₂x∘e₁ₗ'∘H₁ₗ∘d₁ₗ), $v, $i, $j)) == 0
-                    @test_broken (@ballocated LazyTensors.apply($(D₂y∘e₁ₗ'∘H₁ₗ∘d₁ₗ), $v, $i, $j)) == 0
-                    @test        (@ballocated LazyTensors.apply($(D₂x∘e₁ₗ'∘d₁ₗ),     $v, $i, $j)) == 0
-                    @test        (@ballocated LazyTensors.apply($(D₂y∘e₁ₗ'∘d₁ₗ),     $v, $i, $j)) == 0
+                @test_broken (@ballocated LazyTensors.apply($(H⁻¹∘e₁ₗ'∘H₁ₗ), $u, $i, $j)) == 0
+                @test        (@ballocated LazyTensors.apply($(H₁ₗ∘e₁ₗ∘H⁻¹),  $v, $i)) == 0
+                @test        (@ballocated LazyTensors.apply($(H₁ₗ∘d₁ₗ∘H⁻¹),  $v, $i)) == 0
 
-                    @test (@ballocated LazyTensors.apply($(H⁻¹∘e₁ₗ'), $u, $i, $j)) == 0
-                    @test (@ballocated LazyTensors.apply($(e₁ₗ'∘H₁ₗ), $u, $i, $j)) == 0
-                    @test (@ballocated LazyTensors.apply($(H₁ₗ∘d₁ₗ),  $v, $i)) == 0
-
-                    @test_broken (@ballocated LazyTensors.apply($(H⁻¹∘e₁ₗ'∘H₁ₗ), $u, $i, $j)) == 0
-                    @test        (@ballocated LazyTensors.apply($(H₁ₗ∘e₁ₗ∘H⁻¹),  $v, $i)) == 0
-                    @test        (@ballocated LazyTensors.apply($(H₁ₗ∘d₁ₗ∘H⁻¹),  $v, $i)) == 0
-
-                    @test_broken (@ballocated LazyTensors.apply($(e₁ₗ'∘e₁ₗ∘e₁ₗ'∘e₁ₗ), $v, $i, $j)) == 0
-                    @test        (@ballocated LazyTensors.apply($(e₁ₗ'∘e₁ₗ∘e₁ₗ'),     $u, $i, $j)) == 0
-                    @test        (@ballocated LazyTensors.apply($(e₁ₗ∘e₁ₗ'∘e₁ₗ),      $v, $i)) == 0
-                    @test        (@ballocated LazyTensors.apply($(e₁ₗ'∘e₁ₗ),          $v, $i, $j)) == 0
-                    @test        (@ballocated LazyTensors.apply($(e₁ₗ∘e₁ₗ'),          $u, $i)) == 0
+                @test_broken (@ballocated LazyTensors.apply($(e₁ₗ'∘e₁ₗ∘e₁ₗ'∘e₁ₗ), $v, $i, $j)) == 0
+                @test        (@ballocated LazyTensors.apply($(e₁ₗ'∘e₁ₗ∘e₁ₗ'),     $u, $i, $j)) == 0
+                @test        (@ballocated LazyTensors.apply($(e₁ₗ∘e₁ₗ'∘e₁ₗ),      $v, $i)) == 0
+                @test        (@ballocated LazyTensors.apply($(e₁ₗ'∘e₁ₗ),          $v, $i, $j)) == 0
+                @test        (@ballocated LazyTensors.apply($(e₁ₗ∘e₁ₗ'),          $u, $i)) == 0
 
 
-                    @test (@ballocated LazyTensors.apply($H, $v, $i, $j)) == 0
-                    @test (@ballocated LazyTensors.apply($(H∘H), $v, $i, $j)) == 0
-                    @test_broken (@ballocated LazyTensors.apply($(H∘H∘H), $v, $i, $j)) == 0
-                    @test_broken (@ballocated LazyTensors.apply($(H∘H∘H∘H), $v, $i, $j)) == 0
-                end
-                @test (@ballocated LazyTensors.apply($(e₁ₗ∘d₁ₗ'), $u, $i)) == 0
-                @test (@ballocated LazyTensors.apply($(d₁ₗ∘e₁ₗ'), $u, $i)) == 0
+                @test (@ballocated LazyTensors.apply($H, $v, $i, $j)) == 0
+                @test (@ballocated LazyTensors.apply($(H∘H), $v, $i, $j)) == 0
+                @test_broken (@ballocated LazyTensors.apply($(H∘H∘H), $v, $i, $j)) == 0
+                @test_broken (@ballocated LazyTensors.apply($(H∘H∘H∘H), $v, $i, $j)) == 0
 
-                @test (@ballocated LazyTensors.apply($(e₁ₗ∘H∘d₁ₗ'), $u, $i)) == 0
-                @test (@ballocated LazyTensors.apply($(d₁ₗ∘H∘e₁ₗ'), $u, $i)) == 0
-
-                @test (@ballocated LazyTensors.apply($(H₁ₗ∘e₁ₗ∘d₁ₗ'), $u, $i)) == 0
-                @test (@ballocated LazyTensors.apply($(H₁ₗ∘d₁ₗ∘e₁ₗ'), $u, $i)) == 0
-
-                @test_broken (@ballocated LazyTensors.apply($(H₁ₗ∘e₁ₗ∘H∘d₁ₗ'), $u, $i)) == 0
-                @test_broken (@ballocated LazyTensors.apply($(H₁ₗ∘d₁ₗ∘H∘e₁ₗ'), $u, $i)) == 0
-
-                @test_broken (@ballocated LazyTensors.apply($(e₁ₗ∘H∘d₁ₗ'∘H₁ₗ), $u, $i)) == 0
-                @test_broken (@ballocated LazyTensors.apply($(d₁ₗ∘H∘e₁ₗ'∘H₁ₗ), $u, $i)) == 0
             end
-            @test (@ballocated LazyTensors.apply($neumannSAT₁ₗ, $v,  1,  1)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₁ₗ, $v,  1,  6)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₁ₗ, $v,  1, 15)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₁ₗ, $v,  6,  1)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₁ₗ, $v,  6,  6)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₁ₗ, $v,  6, 15)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₁ₗ, $v, 15,  1)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₁ₗ, $v, 15,  6)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₁ₗ, $v, 15, 15)) == 0
+
+            @test (@ballocated LazyTensors.apply($e₁ₗ, $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($e₁ᵤ, $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($e₂ₗ, $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($e₂ᵤ, $v, $i)) == 0
+
+            @test (@ballocated LazyTensors.apply($d₁ₗ, $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($d₁ᵤ, $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($d₂ₗ, $v, $i)) == 0
+            @test (@ballocated LazyTensors.apply($d₂ᵤ, $v, $i)) == 0
 
-            @test (@ballocated LazyTensors.apply($neumannSAT₂ᵤ, $v,  1,  1)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₂ᵤ, $v,  1,  6)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₂ᵤ, $v,  1, 15)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₂ᵤ, $v,  6,  1)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₂ᵤ, $v,  6,  6)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₂ᵤ, $v,  6, 15)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₂ᵤ, $v, 15,  1)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₂ᵤ, $v, 15,  6)) == 0
-            @test (@ballocated LazyTensors.apply($neumannSAT₂ᵤ, $v, 15, 15)) == 0
+            ## Experiments
+            @test (@ballocated LazyTensors.apply($(e₁ₗ∘d₁ₗ'), $u, $i)) == 0
+            @test (@ballocated LazyTensors.apply($(d₁ₗ∘e₁ₗ'), $u, $i)) == 0
+
+            @test (@ballocated LazyTensors.apply($(e₁ₗ∘H∘d₁ₗ'), $u, $i)) == 0
+            @test (@ballocated LazyTensors.apply($(d₁ₗ∘H∘e₁ₗ'), $u, $i)) == 0
+
+            @test (@ballocated LazyTensors.apply($(H₁ₗ∘e₁ₗ∘d₁ₗ'), $u, $i)) == 0
+            @test (@ballocated LazyTensors.apply($(H₁ₗ∘d₁ₗ∘e₁ₗ'), $u, $i)) == 0
+
+            @test_broken (@ballocated LazyTensors.apply($(H₁ₗ∘e₁ₗ∘H∘d₁ₗ'), $u, $i)) == 0
+            @test_broken (@ballocated LazyTensors.apply($(H₁ₗ∘d₁ₗ∘H∘e₁ₗ'), $u, $i)) == 0
+
+            @test_broken (@ballocated LazyTensors.apply($(e₁ₗ∘H∘d₁ₗ'∘H₁ₗ), $u, $i)) == 0
+            @test_broken (@ballocated LazyTensors.apply($(d₁ₗ∘H∘e₁ₗ'∘H₁ₗ), $u, $i)) == 0
         end
-
     end
 end