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