#include "daemon/channel.c"
#include "daemon/htlc.c"
#include <assert.h>
#include <stdio.h>

/* AUTOGENERATED MOCKS START */
/* Generated stub for db_new_htlc */
bool db_new_htlc(struct peer *peer, const struct htlc *htlc)
{ fprintf(stderr, "db_new_htlc called!\n"); abort(); }
/* Generated stub for db_update_htlc_state */
bool db_update_htlc_state(struct peer *peer, const struct htlc *htlc,
				 enum htlc_state oldstate)
{ fprintf(stderr, "db_update_htlc_state called!\n"); abort(); }
/* Generated stub for log_ */
void log_(struct log *log, enum log_level level, const char *fmt, ...)
	
{ fprintf(stderr, "log_ called!\n"); abort(); }
/* AUTOGENERATED MOCKS END */

static void test_maxfee(size_t htlcs, u64 funds)
{
	struct channel_state cstate;
	uint64_t maxrate;

	cstate.side[LOCAL].pay_msat = funds;
	cstate.side[LOCAL].fee_msat = 0;
	cstate.num_nondust = htlcs;

	maxrate = approx_max_feerate(&cstate, LOCAL);
	assert(fee_by_feerate(tx_bytes(htlcs), maxrate) <= funds);
}

int main(void)
{
	size_t htlcs, i;
	for (htlcs = 0; htlcs < 600; htlcs++) {
		for (i = 0; i < 32; i++) {
			test_maxfee(htlcs, i);
			test_maxfee(htlcs, 1ULL << i);
			test_maxfee(htlcs, (1ULL << i) - 1);
			test_maxfee(htlcs, (1ULL << i) + 1);
		}
	}
	return 0;
}