initial commits
							parent
							
								
									802d750bff
								
							
						
					
					
						commit
						2b7518e81f
					
				|  | @ -0,0 +1,78 @@ | |||
| package hexadeca | ||||
| 
 | ||||
| // SymbolLowerCase is used with hexadeca.EncodeByte() to encode a byte into hexadecimal symbols using lower-case symbols from ASCII / Unicode UTF-8.
 | ||||
| // I.e.,
 | ||||
| //
 | ||||
| // '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
 | ||||
| //
 | ||||
| // Example usage:
 | ||||
| //
 | ||||
| //	mostSignificiant, leastSignificant := hexadeca.EncodeByte(value, hexadeca.SymbolLowerCase)
 | ||||
| //
 | ||||
| // If ‘value’ was 254 (== 0xFE) then ‘mostSignificiant’ would be 'f' and and ‘leastSignificant’ would be 'e'.
 | ||||
| func SymbolLowerCase(value byte) rune { | ||||
| 	const table string = "0123456789abcdef" | ||||
| 
 | ||||
| 	var index int = int(value) % len(table) | ||||
| 
 | ||||
| 	var result rune = rune(table[index]) | ||||
| 
 | ||||
| 	return result | ||||
| } | ||||
| 
 | ||||
| // SymbolPersian is used with hexadeca.EncodeByte() to encode a byte into hexadecimal symbols using Persian symbols from Unicode UTF-8.
 | ||||
| // I.e.,
 | ||||
| //
 | ||||
| // '۰' (zero), '۱' (one), '۲' (two), '۳' (three), '۴' (four), '۵' (five), '۶' (six), '۷' (seven), '۸' (eight) ,'۹' (nine), 'ا' (alef), 'ب ' (be), 'پ ' (pe), 'ت ' (te), 'ث ' (s̱e), 'ج' (jim)
 | ||||
| //
 | ||||
| // Example usage:
 | ||||
| //
 | ||||
| //	mostSignificiant, leastSignificant := hexadeca.EncodeByte(value, hexadeca.SymbolPersian)
 | ||||
| //
 | ||||
| // If ‘value’ was 90 (== 0x5A) then ‘mostSignificiant’ would be '۵' and and ‘leastSignificant’ would be '\u0627'.
 | ||||
| func SymbolPersian(value byte) rune { | ||||
| 	var table [16]rune = [16]rune{ | ||||
| 		'\u06F0', // ۰ (zero)
 | ||||
| 		'\u06F1', // ۱ (one)
 | ||||
| 		'\u06F2', // ۲ (two)
 | ||||
| 		'\u06F3', // ۳ (three)
 | ||||
| 		'\u06F4', // ۴ (four)
 | ||||
| 		'\u06F5', // ۵ (five)
 | ||||
| 		'\u06F6', // ۶ (six)
 | ||||
| 		'\u06F7', // ۷ (seven)
 | ||||
| 		'\u06F8', // ۸ (eight)
 | ||||
| 		'\u06F9', // ۹ (nine)
 | ||||
| 		'\u0627', // ا (alef)
 | ||||
| 		'\u0628', // ب  (be)
 | ||||
| 		'\u067E', // پ  (pe)
 | ||||
| 		'\u062A', // ت  (te)
 | ||||
| 		'\u062B', // ث  (s̱e)
 | ||||
| 		'\u062C', // ج (jim)
 | ||||
| 	} | ||||
| 
 | ||||
| 	var index int = int(value) % len(table) | ||||
| 
 | ||||
| 	var result rune = table[index] | ||||
| 
 | ||||
| 	return result | ||||
| } | ||||
| 
 | ||||
| // SymbolUpperCase is used with hexadeca.EncodeByte() to encode a byte into hexadecimal symbols using upper-case symbols from ASCII / Unicode UTF-8.
 | ||||
| // I.e.,
 | ||||
| //
 | ||||
| // '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
 | ||||
| //
 | ||||
| // Example usage:
 | ||||
| //
 | ||||
| //	mostSignificiant, leastSignificant := hexadeca.EncodeByte(value, hexadeca.SymbolUpperCase)
 | ||||
| //
 | ||||
| // If ‘value’ was 254 (== 0xFE) then ‘mostSignificiant’ would be 'F' and and ‘leastSignificant’ would be 'E'.
 | ||||
| func SymbolUpperCase(value byte) rune { | ||||
| 	const table string = "0123456789ABCDEF" | ||||
| 
 | ||||
| 	var index int = int(value) % len(table) | ||||
| 
 | ||||
| 	var result rune = rune(table[index]) | ||||
| 
 | ||||
| 	return result | ||||
| } | ||||
|  | @ -0,0 +1,271 @@ | |||
| package hexadeca_test | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"sourcecode.social/reiver/go-hexadeca" | ||||
| ) | ||||
| 
 | ||||
| func TestSymbolLowerCase(t *testing.T) { | ||||
| 
 | ||||
| 	tests := []struct{ | ||||
| 		Value byte | ||||
| 		Expected rune | ||||
| 	}{ | ||||
| 		{ | ||||
| 			Value:     0, | ||||
| 			Expected: '0', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     1, | ||||
| 			Expected: '1', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     2, | ||||
| 			Expected: '2', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     3, | ||||
| 			Expected: '3', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     4, | ||||
| 			Expected: '4', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     5, | ||||
| 			Expected: '5', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     6, | ||||
| 			Expected: '6', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     7, | ||||
| 			Expected: '7', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     8, | ||||
| 			Expected: '8', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     9, | ||||
| 			Expected: '9', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    10, | ||||
| 			Expected: 'a', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    11, | ||||
| 			Expected: 'b', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    12, | ||||
| 			Expected: 'c', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    13, | ||||
| 			Expected: 'd', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    14, | ||||
| 			Expected: 'e', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    15, | ||||
| 			Expected: 'f', | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for testNumber, test := range tests { | ||||
| 
 | ||||
| 		actual := hexadeca.SymbolLowerCase(test.Value) | ||||
| 		expected := test.Expected | ||||
| 
 | ||||
| 		if expected != actual { | ||||
| 			t.Errorf("For test #%d, the actual value is not what was expected.", testNumber) | ||||
| 			t.Logf("EXPECTED: %q (%d)", expected, expected) | ||||
| 			t.Logf("ACTUAL:   %q (%d)", actual, actual) | ||||
| 			t.Logf("VALUE:     %x (%d)", test.Value, test.Value) | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestSymbolPersian(t *testing.T) { | ||||
| 
 | ||||
| 	tests := []struct{ | ||||
| 		Value byte | ||||
| 		Expected rune | ||||
| 	}{ | ||||
| 		{ | ||||
| 			Value:     0, | ||||
| 			Expected: '۰', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     1, | ||||
| 			Expected: '۱', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     2, | ||||
| 			Expected: '۲', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     3, | ||||
| 			Expected: '۳', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     4, | ||||
| 			Expected: '۴', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     5, | ||||
| 			Expected: '۵', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     6, | ||||
| 			Expected: '۶', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     7, | ||||
| 			Expected: '۷', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     8, | ||||
| 			Expected: '۸', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     9, | ||||
| 			Expected: '۹', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    10, | ||||
| 			Expected: 'ا', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    11, | ||||
| 			Expected: 'ب', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    12, | ||||
| 			Expected: 'پ', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    13, | ||||
| 			Expected: 'ت', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    14, | ||||
| 			Expected: 'ث', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    15, | ||||
| 			Expected: 'ج', | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for testNumber, test := range tests { | ||||
| 
 | ||||
| 		actual := hexadeca.SymbolPersian(test.Value) | ||||
| 		expected := test.Expected | ||||
| 
 | ||||
| 		if expected != actual { | ||||
| 			t.Errorf("For test #%d, the actual value is not what was expected.", testNumber) | ||||
| 			t.Logf("EXPECTED: %q (%d)", expected, expected) | ||||
| 			t.Logf("ACTUAL:   %q (%d)", actual, actual) | ||||
| 			t.Logf("VALUE:     %x (%d)", test.Value, test.Value) | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestSymbolUpperCase(t *testing.T) { | ||||
| 
 | ||||
| 	tests := []struct{ | ||||
| 		Value byte | ||||
| 		Expected rune | ||||
| 	}{ | ||||
| 		{ | ||||
| 			Value:     0, | ||||
| 			Expected: '0', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     1, | ||||
| 			Expected: '1', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     2, | ||||
| 			Expected: '2', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     3, | ||||
| 			Expected: '3', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     4, | ||||
| 			Expected: '4', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     5, | ||||
| 			Expected: '5', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     6, | ||||
| 			Expected: '6', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     7, | ||||
| 			Expected: '7', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     8, | ||||
| 			Expected: '8', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:     9, | ||||
| 			Expected: '9', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    10, | ||||
| 			Expected: 'A', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    11, | ||||
| 			Expected: 'B', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    12, | ||||
| 			Expected: 'C', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    13, | ||||
| 			Expected: 'D', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    14, | ||||
| 			Expected: 'E', | ||||
| 		}, | ||||
| 		{ | ||||
| 			Value:    15, | ||||
| 			Expected: 'F', | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for testNumber, test := range tests { | ||||
| 
 | ||||
| 		actual := hexadeca.SymbolUpperCase(test.Value) | ||||
| 		expected := test.Expected | ||||
| 
 | ||||
| 		if expected != actual { | ||||
| 			t.Errorf("For test #%d, the actual value is not what was expected.", testNumber) | ||||
| 			t.Logf("EXPECTED: %q (%d)", expected, expected) | ||||
| 			t.Logf("ACTUAL:   %q (%d)", actual, actual) | ||||
| 			t.Logf("VALUE:     %x (%d)", test.Value, test.Value) | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
		Loading…
	
		Reference in New Issue