mirror of
https://github.com/reactos/syzkaller.git
synced 2024-11-24 20:09:49 +00:00
73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
|
// Copyright 2018 syzkaller project authors. All rights reserved.
|
||
|
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
|
||
|
|
||
|
package prog
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestMemAlloc(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
type op struct {
|
||
|
addr uint64
|
||
|
size int // if positive do noteAlloc, otherwise -- alloc
|
||
|
}
|
||
|
tests := [][]op{
|
||
|
[]op{
|
||
|
// Just sequential allocation.
|
||
|
{0, -1},
|
||
|
{64, -64},
|
||
|
{128, -65},
|
||
|
{256, -16},
|
||
|
{320, -8},
|
||
|
},
|
||
|
[]op{
|
||
|
// First reserve some memory and then allocate.
|
||
|
{0, 1},
|
||
|
{64, 63},
|
||
|
{128, 64},
|
||
|
{192, 65},
|
||
|
{320, -1},
|
||
|
{448, 1},
|
||
|
{384, -1},
|
||
|
{576, 1},
|
||
|
{640, -128},
|
||
|
},
|
||
|
}
|
||
|
for ti, test := range tests {
|
||
|
test := test
|
||
|
t.Run(fmt.Sprint(ti), func(t *testing.T) {
|
||
|
ma := newMemAlloc(16 << 20)
|
||
|
for i, op := range test {
|
||
|
if op.size > 0 {
|
||
|
t.Logf("#%v: noteAlloc(%v, %v)", i, op.addr, op.size)
|
||
|
ma.noteAlloc(op.addr, uint64(op.size))
|
||
|
continue
|
||
|
}
|
||
|
t.Logf("#%v: alloc(%v) = %v", i, -op.size, op.addr)
|
||
|
addr := ma.alloc(nil, uint64(-op.size))
|
||
|
if addr != op.addr {
|
||
|
t.Fatalf("bad result %v", addr)
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestVmaAlloc(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
target, err := GetTarget("test", "64")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
r := newRand(target, randSource(t))
|
||
|
va := newVmaAlloc(1000)
|
||
|
for i := 0; i < 30; i++ {
|
||
|
size := r.rand(4) + 1
|
||
|
page := va.alloc(r, size)
|
||
|
t.Logf("alloc(%v) = %3v-%3v\n", size, page, page+size)
|
||
|
}
|
||
|
}
|