Attribute VB_Name = "Test_Cache"
Option Explicit
' ============================================================
' Module Name: Test_Cache
' Module Desc: Debug module to print cache contents to Test_Cache sheet
' Module Methods:
'   - Test_PrintAllCaches
'   - PrintM1CacheToSheet
'   - PrintM1KukanDCacheToSheet
'   - PrintM2CacheToSheet
'   - PrintZ1CacheToSheet
'   - PrintO1CacheToSheet
' ============================================================

' Test Cache Module

Sub Test_PrintAllCaches()
    Call RefreshM1Cache
    Call RefreshM1KukanDCache
    Call RefreshM2Cache
    Call RefreshZ1Cache
    Call RefreshO1Cache
    
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Worksheets("Test_Cache")
    If ws Is Nothing Then
        Set ws = ThisWorkbook.Worksheets.Add
        ws.Name = "Test_Cache"
    End If
    On Error GoTo 0
    
    ws.Cells.ClearContents
    
    Dim r As Long
    r = 1
    ws.Cells(r, 1).Value = "M1 Cache"
    r = r + 1
    Call PrintM1CacheToSheet(ws, r)
    
    r = r + 1
    ws.Cells(r, 1).Value = "M1_KukanD Cache"
    r = r + 1
    Call PrintM1KukanDCacheToSheet(ws, r)
    
    r = r + 1
    ws.Cells(r, 1).Value = "M2 Cache"
    r = r + 1
    Call PrintM2CacheToSheet(ws, r)
    
    r = r + 1
    ws.Cells(r, 1).Value = "Z1 Cache"
    r = r + 1
    Call PrintZ1CacheToSheet(ws, r)
    
    r = r + 1
    ws.Cells(r, 1).Value = "O1 Cache"
    r = r + 1
    Call PrintO1CacheToSheet(ws, r)
    
    ws.Columns.AutoFit
End Sub

Private Sub PrintM1CacheToSheet(ws As Worksheet, ByRef r As Long)
    If m1Cache Is Nothing Then
        ws.Cells(r, 1).Value = "Nothing"
        r = r + 1
        Exit Sub
    End If
    
    ws.Cells(r, 1).Value = "Count: " & m1Cache.Count
    r = r + 1
    
    Dim k As Variant
    For Each k In m1Cache.Keys
        Dim v As Variant
        v = m1Cache(k)
        ws.Cells(r, 1).Value = k
        ws.Cells(r, 2).Value = v(1)
        ws.Cells(r, 3).Value = v(2)
        ws.Cells(r, 4).Value = v(3)
        r = r + 1
    Next k
End Sub

Private Sub PrintM1KukanDCacheToSheet(ws As Worksheet, ByRef r As Long)
    If m1KukanDCache Is Nothing Then
        ws.Cells(r, 1).Value = "Nothing"
        r = r + 1
        Exit Sub
    End If
    
    ws.Cells(r, 1).Value = "Count: " & m1KukanDCache.Count
    r = r + 1
    
    Dim d As Variant
    For Each d In m1KukanDCache.Keys
        ws.Cells(r, 1).Value = d
        r = r + 1
        Dim inner As Object
        Set inner = m1KukanDCache(d)
        Dim f As Variant
        For Each f In inner.Keys
            ws.Cells(r, 2).Value = f
            r = r + 1
            Dim arr As Object
            Set arr = inner(f)
            Dim g As Variant
            For Each g In arr.Keys
                ws.Cells(r, 3).Value = g
                r = r + 1
            Next g
        Next f
    Next d
End Sub

Private Sub PrintM2CacheToSheet(ws As Worksheet, ByRef r As Long)
    If m2Cache Is Nothing Then
        ws.Cells(r, 1).Value = "Nothing"
        r = r + 1
        Exit Sub
    End If
    
    ws.Cells(r, 1).Value = "Count: " & m2Cache.Count
    r = r + 1
    
    Dim k As Variant
    For Each k In m2Cache.Keys
        ws.Cells(r, 1).Value = k
        r = r + 1
        Dim inner As Object
        Set inner = m2Cache(k)
        Dim kanshu As Variant
        For Each kanshu In inner.Keys
            ws.Cells(r, 2).Value = kanshu
            r = r + 1
            Dim innermost As Object
            Set innermost = inner(kanshu)
            Dim c As Variant
            For Each c In innermost.Keys
                ws.Cells(r, 3).Value = c
                ws.Cells(r, 4).Value = innermost(c)
                r = r + 1
            Next c
        Next kanshu
    Next k
End Sub

Private Sub PrintZ1CacheToSheet(ws As Worksheet, ByRef r As Long)
    If z1Cache Is Nothing Then
        ws.Cells(r, 1).Value = "Nothing"
        r = r + 1
        Exit Sub
    End If
    
    ws.Cells(r, 1).Value = "Count: " & z1Cache.Count
    r = r + 1
    
    Dim k As Variant
    For Each k In z1Cache.Keys
        Dim v As Variant
        v = z1Cache(k)
        ws.Cells(r, 1).Value = k
        ws.Cells(r, 2).Value = v(0)
        r = r + 1
    Next k
End Sub

Private Sub PrintO1CacheToSheet(ws As Worksheet, ByRef r As Long)
    If o1Cache Is Nothing Then
        ws.Cells(r, 1).Value = "Nothing"
        r = r + 1
        Exit Sub
    End If
    
    ws.Cells(r, 1).Value = "Count: " & o1Cache.Count
    r = r + 1
    
    Dim c As Variant
    For Each c In o1Cache.Keys
        ws.Cells(r, 1).Value = c
        r = r + 1
        Dim inner As Object
        Set inner = o1Cache(c)
        Dim e As Variant
        For Each e In inner.Keys
            ws.Cells(r, 2).Value = e
            r = r + 1
            Dim arr As Object
            Set arr = inner(e)
            Dim f As Variant
            For Each f In arr.Keys
                ws.Cells(r, 3).Value = f
                r = r + 1
            Next f
        Next e
    Next c
End Sub
