2023-07-31 11:21:22 +09:30
|
|
|
#include "config.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <assert.h>
|
|
|
|
#include <common/wireaddr.h>
|
|
|
|
#include <common/bigsize.h>
|
|
|
|
#include <common/channel_id.h>
|
|
|
|
#include <common/setup.h>
|
|
|
|
#include <common/utils.h>
|
2024-03-20 10:59:28 +10:30
|
|
|
#include <wire/onion_wiregen.h>
|
2023-07-31 11:21:22 +09:30
|
|
|
|
|
|
|
#include <plugins/renepay/dijkstra.h>
|
|
|
|
|
2024-03-20 10:59:28 +10:30
|
|
|
/* AUTOGENERATED MOCKS START */
|
2024-07-17 18:35:11 +09:30
|
|
|
/* Generated stub for sciddir_or_pubkey_from_node_id */
|
|
|
|
bool sciddir_or_pubkey_from_node_id(struct sciddir_or_pubkey *sciddpk UNNEEDED,
|
|
|
|
const struct node_id *node_id UNNEEDED)
|
|
|
|
{ fprintf(stderr, "sciddir_or_pubkey_from_node_id called!\n"); abort(); }
|
2024-03-20 10:59:28 +10:30
|
|
|
/* AUTOGENERATED MOCKS END */
|
|
|
|
|
2023-07-31 11:21:22 +09:30
|
|
|
static void insertion_in_increasing_distance(const tal_t *ctx)
|
|
|
|
{
|
2023-07-31 11:21:25 +09:30
|
|
|
struct dijkstra *dijkstra = dijkstra_new(ctx,10);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
2023-07-31 11:21:25 +09:30
|
|
|
for(int i=0;i<dijkstra_maxsize(dijkstra);++i)
|
2023-07-31 11:21:22 +09:30
|
|
|
{
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_update(dijkstra,i,10+i);
|
|
|
|
assert(dijkstra_size(dijkstra)==(i+1));
|
2023-07-31 11:21:22 +09:30
|
|
|
}
|
|
|
|
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_update(dijkstra,3,3);
|
|
|
|
assert(dijkstra_top(dijkstra)==3);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_update(dijkstra,3,15);
|
|
|
|
assert(dijkstra_top(dijkstra)==0);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_update(dijkstra,3,-1);
|
|
|
|
assert(dijkstra_top(dijkstra)==3);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_pop(dijkstra);
|
|
|
|
assert(dijkstra_size(dijkstra)==9);
|
|
|
|
assert(dijkstra_top(dijkstra)==0);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
|
|
|
// Insert again
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_update(dijkstra,3,3+10);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
|
|
|
u32 top=0;
|
2023-07-31 11:21:25 +09:30
|
|
|
while(!dijkstra_empty(dijkstra))
|
2023-07-31 11:21:22 +09:30
|
|
|
{
|
2023-07-31 11:21:25 +09:30
|
|
|
assert(top==dijkstra_top(dijkstra));
|
2023-07-31 11:21:22 +09:30
|
|
|
top++;
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_pop(dijkstra);
|
2023-07-31 11:21:22 +09:30
|
|
|
}
|
|
|
|
}
|
|
|
|
static void insertion_in_decreasing_distance(const tal_t *ctx)
|
|
|
|
{
|
2023-07-31 11:21:25 +09:30
|
|
|
struct dijkstra *dijkstra = dijkstra_new(ctx,10);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
2023-07-31 11:21:25 +09:30
|
|
|
for(int i=0;i<dijkstra_maxsize(dijkstra);++i)
|
2023-07-31 11:21:22 +09:30
|
|
|
{
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_update(dijkstra,i,10-i);
|
|
|
|
assert(dijkstra_size(dijkstra)==(i+1));
|
2023-07-31 11:21:22 +09:30
|
|
|
}
|
|
|
|
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_update(dijkstra,3,-3);
|
|
|
|
assert(dijkstra_top(dijkstra)==3);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_update(dijkstra,3,15);
|
|
|
|
assert(dijkstra_top(dijkstra)==9);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_update(dijkstra,3,-1);
|
|
|
|
assert(dijkstra_top(dijkstra)==3);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_pop(dijkstra);
|
|
|
|
assert(dijkstra_size(dijkstra)==9);
|
|
|
|
assert(dijkstra_top(dijkstra)==9);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
|
|
|
// Insert again
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_update(dijkstra,3,10-3);
|
2023-07-31 11:21:22 +09:30
|
|
|
|
|
|
|
u32 top=9;
|
2023-07-31 11:21:25 +09:30
|
|
|
while(!dijkstra_empty(dijkstra))
|
2023-07-31 11:21:22 +09:30
|
|
|
{
|
2023-07-31 11:21:25 +09:30
|
|
|
assert(top==dijkstra_top(dijkstra));
|
2023-07-31 11:21:22 +09:30
|
|
|
top--;
|
2023-07-31 11:21:25 +09:30
|
|
|
dijkstra_pop(dijkstra);
|
2023-07-31 11:21:22 +09:30
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
common_setup(argv[0]);
|
|
|
|
|
|
|
|
// does tal_free() cleansup correctly?
|
|
|
|
const tal_t *this_ctx = tal(NULL,tal_t);
|
|
|
|
insertion_in_increasing_distance(this_ctx);
|
|
|
|
tal_free(this_ctx);
|
|
|
|
insertion_in_decreasing_distance(tmpctx);
|
|
|
|
|
|
|
|
common_shutdown();
|
|
|
|
}
|