
#include <Array.au3>
#include 'ArrayToStringEx.au3'

_Test()

Func _Test()
	; 1D Array mit einigen verschiedenen Datentypen (incl Array im Array)
	Local $aTest = _TestArray()
	Local $String = _ArrayToStringEx($aTest)
	Local $Array = _StringToArrayEx($String)
	ConsoleWrite('BYTE[' & StringLen($String) & '] ' & StringTrimLeft(StringToBinary($String), 2) & @CRLF & @CRLF & '+ Vergleich HauptArray:' & @CRLF)

	; Mal drüberschauen:
	_ArrayDisplay($aTest, 'Original')
	_ArrayDisplay($Array, 'Rekonstruiert')

	; Datentypen in der Konsole ausgeben und Inhalte vergleichen
	For $i = 0 To UBound($Array) - 1 Step 1
		If $aTest[$i] <> $Array[$i] Then ConsoleWrite('! Obacht: ' & $aTest[$i] & ' <> ' & $Array[$i] & @CRLF)
		ConsoleWrite(VarGetType($aTest[$i]) & ' - ' & VarGetType($Array[$i]) & @CRLF)
	Next
	ConsoleWrite(@CRLF)
	; Hoppla, wir haben einen Error
	; Der kommt daher, weil die verschachtelten Arrays unterschiedliche AutoIt-interne Bezeichnungen haben
	; (Logisch, irgendwie muss man sie ja unterscheiden)
	; Ein direkter Vergleich zeigt aber, dass die Arrays den gleichen Inhalt besitzen

	Local $aSub_Test = $aTest[8]
	Local $aSub_Array = $Array[8]

	_ArrayDisplay($aSub_Test, 'Original')
	_ArrayDisplay($aSub_Array, 'Rekonstruiert')

	; Die Verschachtelung kann beliebig tief sein (Limit ist das Rekursionslimit von AutoIt)

	Local $aSubSub_Test = $aSub_Test[1][4]
	Local $aSubSub_Array = $aSub_Array[1][4]

	_ArrayDisplay($aSubSub_Test, 'Original')
	_ArrayDisplay($aSubSub_Array, 'Rekonstruiert')

EndFunc   ;==>_Test1D

Func _TestArray()
	Local $_n[3][2] = [[Null, Default],[False, True],[True, False]]
	Local $_a[2][5] = [['Array in Array', 54321, False, -3.131, -52], [1, 2, 3, 4, $_n]]
	Local $_b[14] = [12345, 1.2345, True, Default, 'Hallo', Binary('0xFFFFFFFFFFFFFFFFFF'), Ptr(2), 0xFF804020FF804020, $_a, MsgBox]
	Return $_b
EndFunc   ;==>_Test
