From 71559a48afc860d124b4ddfeb8df752b22a25053 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 23 Mar 2025 12:01:36 +0800 Subject: Separate validateBitZeros into a separate file --- bitwise.go | 21 ++++++++++++++ bitwise_test.go | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 20 ------------- main_test.go | 90 --------------------------------------------------------- 4 files changed, 111 insertions(+), 110 deletions(-) create mode 100644 bitwise.go create mode 100644 bitwise_test.go delete mode 100644 main_test.go diff --git a/bitwise.go b/bitwise.go new file mode 100644 index 0000000..b9b6f47 --- /dev/null +++ b/bitwise.go @@ -0,0 +1,21 @@ +package main + +func validateBitZeros(bs []byte, n uint) bool { + q := n / 8 + r := n % 8 + + for i := uint(0); i < q; i++ { + if bs[i] != 0 { + return false + } + } + + if r > 0 { + mask := byte(0xFF << (8 - r)) + if bs[q]&mask != 0 { + return false + } + } + + return true +} diff --git a/bitwise_test.go b/bitwise_test.go new file mode 100644 index 0000000..394d407 --- /dev/null +++ b/bitwise_test.go @@ -0,0 +1,90 @@ +package main + +import ( + "testing" +) + +func TestValidateBitZeros(t *testing.T) { + tests := []struct { + name string + bs []byte + n uint + expected bool + }{ + { + name: "First 8 bits are zeros", + bs: []byte{0x00, 0x01}, + n: 8, + expected: true, + }, + { + name: "First 8 bits are not all zeros", + bs: []byte{0x01, 0x00}, + n: 8, + expected: false, + }, + { + name: "First 16 bits are zeros", + bs: []byte{0x00, 0x00, 0x01}, + n: 16, + expected: true, + }, + { + name: "First 16 bits are not all zeros", + bs: []byte{0x01, 0x00, 0x00}, + n: 16, + expected: false, + }, + { + name: "First 9 bits are zeros", + bs: []byte{0x00, 0x01}, + n: 9, + expected: true, + }, + { + name: "First 9 bits are not all zeros", + bs: []byte{0x01, 0x01}, + n: 9, + expected: false, + }, + { + name: "First 10 bits are zeros", + bs: []byte{0x00, 0x20}, + n: 10, + expected: true, + }, + { + name: "First 10 bits are not all zeros", + bs: []byte{0x00, 0x40}, + n: 10, + expected: false, + }, + { + name: "First 24 bits are zeros", + bs: []byte{0x00, 0x00, 0x00, 0x01}, + n: 24, + expected: true, + }, + { + name: "First 24 bits are not all zeros", + bs: []byte{0x00, 0x01, 0x00, 0x00}, + n: 24, + expected: false, + }, + { + name: "Checking zero bits", + bs: []byte{0xFF, 0xFF}, + n: 0, + expected: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := validateBitZeros(tt.bs, tt.n) + if got != tt.expected { + t.Errorf("validateBitZeros(%v, %v) = %v; want %v", tt.bs, tt.n, got, tt.expected) + } + }) + } +} diff --git a/main.go b/main.go index 0ff17e3..0c44222 100644 --- a/main.go +++ b/main.go @@ -197,23 +197,3 @@ func proxyRequest(writer http.ResponseWriter, request *http.Request) { func stringToBytes(s string) (bytes []byte) { return unsafe.Slice(unsafe.StringData(s), len(s)) } - -func validateBitZeros(bs []byte, n uint) bool { - q := n / 8 - r := n % 8 - - for i := uint(0); i < q; i++ { - if bs[i] != 0 { - return false - } - } - - if r > 0 { - mask := byte(0xFF << (8 - r)) - if bs[q]&mask != 0 { - return false - } - } - - return true -} diff --git a/main_test.go b/main_test.go deleted file mode 100644 index 394d407..0000000 --- a/main_test.go +++ /dev/null @@ -1,90 +0,0 @@ -package main - -import ( - "testing" -) - -func TestValidateBitZeros(t *testing.T) { - tests := []struct { - name string - bs []byte - n uint - expected bool - }{ - { - name: "First 8 bits are zeros", - bs: []byte{0x00, 0x01}, - n: 8, - expected: true, - }, - { - name: "First 8 bits are not all zeros", - bs: []byte{0x01, 0x00}, - n: 8, - expected: false, - }, - { - name: "First 16 bits are zeros", - bs: []byte{0x00, 0x00, 0x01}, - n: 16, - expected: true, - }, - { - name: "First 16 bits are not all zeros", - bs: []byte{0x01, 0x00, 0x00}, - n: 16, - expected: false, - }, - { - name: "First 9 bits are zeros", - bs: []byte{0x00, 0x01}, - n: 9, - expected: true, - }, - { - name: "First 9 bits are not all zeros", - bs: []byte{0x01, 0x01}, - n: 9, - expected: false, - }, - { - name: "First 10 bits are zeros", - bs: []byte{0x00, 0x20}, - n: 10, - expected: true, - }, - { - name: "First 10 bits are not all zeros", - bs: []byte{0x00, 0x40}, - n: 10, - expected: false, - }, - { - name: "First 24 bits are zeros", - bs: []byte{0x00, 0x00, 0x00, 0x01}, - n: 24, - expected: true, - }, - { - name: "First 24 bits are not all zeros", - bs: []byte{0x00, 0x01, 0x00, 0x00}, - n: 24, - expected: false, - }, - { - name: "Checking zero bits", - bs: []byte{0xFF, 0xFF}, - n: 0, - expected: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := validateBitZeros(tt.bs, tt.n) - if got != tt.expected { - t.Errorf("validateBitZeros(%v, %v) = %v; want %v", tt.bs, tt.n, got, tt.expected) - } - }) - } -} -- cgit v1.2.3