package buckets

import "testing"

func Queue_normaliseBitrate(t *testing.T) {
	type fields struct {
		queue *queue
	}
	type args struct {
		currentBitrate int
	}
	tests := []struct {
		name   string
		fields fields
		args   args
		want   []int
	}{
		{
			name: "normaliseBitrate: big drop",
			fields: fields{
				queue: &queue{
					q: []elem{
						{bitrate: 900},
						{bitrate: 750},
						{bitrate: 780},
						{bitrate: 1100},
						{bitrate: 950},
						{bitrate: 700},
						{bitrate: 800},
						{bitrate: 900},
						{bitrate: 1000},
						{bitrate: 1100},
						// avg = 898
					},
				},
			},
			args: args{
				currentBitrate: 350,
			},
			want: []int{816, 700, 537, 350, 350},
		}, {
			name: "normaliseBitrate: small drop",
			fields: fields{
				queue: &queue{
					q: []elem{
						{bitrate: 900},
						{bitrate: 750},
						{bitrate: 780},
						{bitrate: 1100},
						{bitrate: 950},
						{bitrate: 700},
						{bitrate: 800},
						{bitrate: 900},
						{bitrate: 1000},
						{bitrate: 1100},
						// avg = 898
					},
				},
			},
			args: args{
				currentBitrate: 700,
			},
			want: []int{878, 842, 825, 825, 812, 787, 750, 700},
		}, {
			name: "normaliseBitrate",
			fields: fields{
				queue: &queue{
					q: []elem{
						{bitrate: 900},
						{bitrate: 750},
						{bitrate: 780},
						{bitrate: 1100},
						{bitrate: 950},
						{bitrate: 700},
						{bitrate: 800},
						{bitrate: 900},
						{bitrate: 1000},
						{bitrate: 1100},
						// avg = 898
					},
				},
			},
			args: args{
				currentBitrate: 1350,
			},
			want: []int{943, 1003, 1060, 1085},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			m := tt.fields.queue
			for i := 0; i < len(tt.want); i++ {
				if got := m.normaliseBitrate(tt.args.currentBitrate); got != tt.want[i] {
					t.Errorf("normaliseBitrate() [%d] = %v, want %v", i, got, tt.want[i])
				}
			}
		})
	}
}