package main

import "testing"

func Example() {
	demo()
	// Output:
	// billing: 0 order-1
	// without commit: 0 order-1
	// after commit: 1 order-2
	// audit: 0 order-1
	// finish 12 -> next: 10
	// finish 10 -> next: 11
	// finish 11 -> next: 13
	// accepted: a
	// accepted: b
	// backpressure: c
}

func TestCommitBounds(t *testing.T) {
	l := NewLog("x")
	if err := l.Commit("g", 2); err == nil {
		t.Fatal("accepted an offset beyond the log")
	}
	if err := l.Commit("g", 1); err != nil {
		t.Fatal(err)
	}
	if err := l.Commit("g", 0); err == nil {
		t.Fatal("accepted a backwards commit in this model")
	}
}

func TestOutOfOrderCompletion(t *testing.T) {
	f := Frontier{Next: 10}
	for _, offset := range []int{12, 10, 12} {
		f.Complete(offset)
	}
	if f.Next != 11 {
		t.Fatalf("skipped incomplete 11: %d", f.Next)
	}
}
