github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/pkg/align/align_test.go (about)

     1  // Copyright 2015-2022 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package align
     6  
     7  import (
     8  	"testing"
     9  )
    10  
    11  func TestUp(t *testing.T) {
    12  	for _, tt := range []struct {
    13  		name      string
    14  		val       uint
    15  		alignSize uint
    16  		want      uint
    17  	}{
    18  		{
    19  			name:      "below",
    20  			val:       uint(0x02),
    21  			alignSize: uint(0x04),
    22  			want:      uint(0x04),
    23  		},
    24  		{
    25  			name:      "already aligned",
    26  			val:       uint(0x04),
    27  			alignSize: uint(0x04),
    28  			want:      uint(0x04),
    29  		},
    30  		{
    31  			name:      "next",
    32  			val:       uint(0x05),
    33  			alignSize: uint(0x04),
    34  			want:      uint(0x08),
    35  		},
    36  		{
    37  			name:      "different alignSize, already aligned",
    38  			val:       uint(0x08),
    39  			alignSize: uint(0x08),
    40  			want:      uint(0x08),
    41  		},
    42  		{
    43  			name:      "different alignSize, below",
    44  			val:       uint(0x07),
    45  			alignSize: uint(0x08),
    46  			want:      uint(0x08),
    47  		},
    48  		{
    49  			name:      "different alignSize, next",
    50  			val:       uint(0x09),
    51  			alignSize: uint(0x08),
    52  			want:      uint(0x10),
    53  		},
    54  	} {
    55  		t.Run(tt.name, func(t *testing.T) {
    56  			got := Up(tt.val, tt.alignSize)
    57  			if got != tt.want {
    58  				t.Errorf("Up(%#02x, %#02x) = %#02x, want: %#02x", tt.val, tt.alignSize, got, tt.want)
    59  			}
    60  
    61  			pageSize = tt.alignSize
    62  			got = UpPage(tt.val)
    63  			if got != tt.want {
    64  				t.Errorf("UpPage(%#02x) = %#02x, want: %#02x", tt.val, got, tt.want)
    65  			}
    66  		})
    67  	}
    68  }
    69  
    70  func TestDown(t *testing.T) {
    71  	for _, tt := range []struct {
    72  		name      string
    73  		val       uint
    74  		alignSize uint
    75  		want      uint
    76  	}{
    77  		{
    78  			name:      "below",
    79  			val:       uint(0x02),
    80  			alignSize: uint(0x04),
    81  			want:      uint(0x00),
    82  		},
    83  		{
    84  			name:      "already aligned",
    85  			val:       uint(0x04),
    86  			alignSize: uint(0x04),
    87  			want:      uint(0x04),
    88  		},
    89  		{
    90  			name:      "next",
    91  			val:       uint(0x05),
    92  			alignSize: uint(0x04),
    93  			want:      uint(0x04),
    94  		},
    95  		{
    96  			name:      "different alignSize, already aligned",
    97  			val:       uint(0x08),
    98  			alignSize: uint(0x08),
    99  			want:      uint(0x08),
   100  		},
   101  		{
   102  			name:      "different alignSize, below",
   103  			val:       uint(0x07),
   104  			alignSize: uint(0x08),
   105  			want:      uint(0x00),
   106  		},
   107  		{
   108  			name:      "different alignSize, next",
   109  			val:       uint(0x09),
   110  			alignSize: uint(0x08),
   111  			want:      uint(0x08),
   112  		},
   113  	} {
   114  		t.Run(tt.name, func(t *testing.T) {
   115  			got := Down(tt.val, tt.alignSize)
   116  			if got != tt.want {
   117  				t.Errorf("Down(%#02x, %#02x) = %#02x, want: %#02x", tt.val, tt.alignSize, got, tt.want)
   118  			}
   119  
   120  			pageSize = tt.alignSize
   121  			got = DownPage(tt.val)
   122  			if got != tt.want {
   123  				t.Errorf("DownPage(%#02x) = %#02x, want: %#02x", tt.val, got, tt.want)
   124  			}
   125  		})
   126  	}
   127  }