package test

import (
	
	
	

	

	amhist 
	amss 
)

var ss = amss.BasicStates

func ( *testing.T,  amhist.MemoryApi,  int) {

	 := context.Background()
	 := .Machine()
	 := time.Now()

	// validate
	require.True(, .Has(ss.Names()), "Machine has to implement BasicStates")
	require.True(, .IsTracked1(ss.Start), "Start should be tracked")
	require.False(, .IsTracked1(ss.Ready), "Ready should not be tracked")

	.Logf("rounds: %d", )

	// mutate
	for range  {
		.Toggle1(ss.Start, nil)
	}

	.Logf("mach: %s", time.Since())

	require.NoError(, .Sync())

	.Logf("db: %s", time.Since())

	// check conditions
	// now := time.Now().UTC()
	// require.True(t, mem.ActivatedBetween(ctx, ss.Start, start.UTC(), now),
	// 	"Start was activated")
	// require.False(t, mem.ActivatedBetween(ctx, ss.Ready, start.UTC(), now),
	// 	"Ready isn't tracked")

	// machine record
	 := .MachineRecord()
	require.NotNil(, , "Machine record is not nil")

	// many rows, no condition
	,  := .FindLatest(, false, 25, amhist.Query{})
	// sum := []int{}
	// for _, r := range latest {
	// 	sum = append(sum, int(r.Time.MTimeSum))
	// }
	// print(sum)
	require.NoError(, )
	require.Len(, , 25, "25 rows returned")
	require.Equal(, int(.NextId)-24, int([23].Time.MTimeSum),
		"time sum matches")
	require.Equal(, int(.NextId)-25, int([24].Time.MTimeSum),
		"time sum matches")

	.Logf("query: %s", time.Since())
}

func ( *testing.T,  amhist.MemoryApi,  int) {
	 := context.Background()

	// GC
	,  := .FindLatest(, false, .Config().MaxRecords*2,
		amhist.Query{})
	require.NoError(, )
	require.LessOrEqual(, len(), .Config().MaxRecords,
		"max records respected")
}

// TODO test resume
// TODO test schema
// TODO test parallel tracking
// TODO test rpc tracking in /pkg/rpc
// TODO test double tracking
// TODO test config
// TODO test restore
// TODO test transition
// TODO test transition queries