TEST(McmcNutsBaseNuts, transition) { rng_t base_rng(0); int model_size = 1; double init_momentum = 1.5; stan::mcmc::ps_point z_init(model_size); z_init.q(0) = 0; z_init.p(0) = init_momentum; stan::mcmc::mock_model model(model_size); stan::mcmc::mock_nuts sampler(model, base_rng); sampler.set_nominal_stepsize(1); sampler.set_stepsize_jitter(0); sampler.sample_stepsize(); sampler.z() = z_init; std::stringstream output_stream; stan::interface_callbacks::writer::stream_writer writer(output_stream); std::stringstream error_stream; stan::interface_callbacks::writer::stream_writer error_writer(error_stream); stan::mcmc::sample init_sample(z_init.q, 0, 0); stan::mcmc::sample s = sampler.transition(init_sample, writer, error_writer); EXPECT_EQ(31.5, s.cont_params()(0)); EXPECT_EQ(0, s.log_prob()); EXPECT_EQ(1, s.accept_stat()); EXPECT_EQ("", output_stream.str()); EXPECT_EQ("", error_stream.str()); }
void sample_init(sample_data *s, int const *bond_site, double const *bond_value) { init_sample(bond_site, bond_value, s->n, s->J4, s->z, s->offset, s->h2m, &s->um); }
static bool test_foreach_sample(void) { struct pool4_sample expected[COUNT]; unsigned int i = 0; struct foreach_sample_args args; int error; bool success = true; if (!add_common_samples()) return false; init_sample(&expected[i++], 0xc0000200U, 6, 7); init_sample(&expected[i++], 0xc0000201U, 6, 7); init_sample(&expected[i++], 0xc0000210U, 15, 19); init_sample(&expected[i++], 0xc0000210U, 22, 23); init_sample(&expected[i++], 0xc0000211U, 19, 19); init_sample(&expected[i++], 0xc0000220U, 1, 1); init_sample(&expected[i++], 0xc0000221U, 1, 1); init_sample(&expected[i++], 0xc0000222U, 1, 1); init_sample(&expected[i++], 0xc0000223U, 1, 1); if (i != COUNT) { log_err("Input mismatch. Unit test is broken: %u %u", i, COUNT); return false; } args.expected = &expected[0]; args.expected_len = COUNT; args.samples = 0; args.taddrs = 0; error = pool4db_foreach_sample(pool, L4PROTO_TCP, validate_sample, &args, NULL); success &= ASSERT_INT(0, error, "no-offset call"); success &= ASSERT_UINT(9, args.samples, "no-offset samples"); success &= ASSERT_UINT(16, args.taddrs, "no-offset taddrs"); for (i = 0; i < COUNT; i++) { /* foreach sample skips offset. */ args.expected = &expected[i + 1]; args.expected_len = COUNT - i - 1; args.samples = 0; args.taddrs = 0; error = pool4db_foreach_sample(pool, L4PROTO_TCP, validate_sample, &args, &expected[i]); success &= ASSERT_INT(0, error, "call %u", i); /* log_debug("--------------"); */ } return success; }
void qm_debug_timer_cancel(void) { struct quadd_record_data record; struct quadd_debug_data *s = &record.debug; init_sample(&record, NULL); s->type = QM_DEBUG_SAMPLE_TYPE_TIMER_CANCEL; quadd_put_sample(&record, NULL, 0); }
void qm_debug_handler_sample(struct pt_regs *regs) { struct quadd_record_data record; struct quadd_debug_data *s = &record.debug; init_sample(&record, regs); s->type = QM_DEBUG_SAMPLE_TYPE_TIMER_HANDLE; quadd_put_sample(&record, NULL, 0); }
void qm_debug_timer_start(struct pt_regs *regs, u64 period) { struct quadd_record_data record; struct quadd_debug_data *s = &record.debug; init_sample(&record, regs); s->type = QM_DEBUG_SAMPLE_TYPE_TIMER_START; s->timer_period = period; quadd_put_sample(&record, NULL, 0); }
void qm_debug_stop_source(int source_type) { struct quadd_record_data record; struct quadd_debug_data *s = &record.debug; init_sample(&record, NULL); s->type = QM_DEBUG_SAMPLE_TYPE_SOURCE_STOP; s->extra_value1 = source_type; quadd_put_sample(&record, NULL, 0); }
void qm_debug_read_counter(int event_id, u32 prev_val, u32 val) { struct quadd_record_data record; struct quadd_debug_data *s = &record.debug; init_sample(&record, NULL); s->type = QM_DEBUG_SAMPLE_TYPE_READ_COUNTER; s->extra_value1 = event_id; s->extra_value2 = prev_val; s->extra_value3 = val; quadd_put_sample(&record, NULL, 0); }
void qm_debug_task_sched_in(pid_t prev_pid, pid_t current_pid, int prev_nr_active) { struct quadd_record_data record; struct quadd_debug_data *s = &record.debug; init_sample(&record, NULL); s->type = QM_DEBUG_SAMPLE_TYPE_SCHED_IN; s->extra_value1 = prev_pid; s->extra_value2 = current_pid; s->extra_value3 = prev_nr_active; quadd_put_sample(&record, NULL, 0); }
TEST(McmcUnitENuts, transition_test) { rng_t base_rng(4839294); stan::mcmc::unit_e_point z_init(3); z_init.q(0) = 1; z_init.q(1) = -1; z_init.q(2) = 1; z_init.p(0) = -1; z_init.p(1) = 1; z_init.p(2) = -1; std::stringstream output_stream; stan::interface_callbacks::writer::stream_writer writer(output_stream); std::stringstream error_stream; stan::interface_callbacks::writer::stream_writer error_writer(error_stream); std::fstream empty_stream("", std::fstream::in); stan::io::dump data_var_context(empty_stream); gauss3D_model_namespace::gauss3D_model model(data_var_context); stan::mcmc::unit_e_nuts<gauss3D_model_namespace::gauss3D_model, rng_t> sampler(model, base_rng); sampler.z() = z_init; sampler.init_hamiltonian(writer, error_writer); sampler.set_nominal_stepsize(0.1); sampler.set_stepsize_jitter(0); sampler.sample_stepsize(); stan::mcmc::sample init_sample(z_init.q, 0, 0); stan::mcmc::sample s = sampler.transition(init_sample, writer, error_writer); EXPECT_EQ(4, sampler.depth_); EXPECT_EQ((2 << 3) - 1, sampler.n_leapfrog_); EXPECT_FALSE(sampler.divergent_); EXPECT_FLOAT_EQ(1.8718261, s.cont_params()(0)); EXPECT_FLOAT_EQ(-0.74208695, s.cont_params()(1)); EXPECT_FLOAT_EQ( 1.5202962, s.cont_params()(2)); EXPECT_FLOAT_EQ(-3.1828632, s.log_prob()); EXPECT_FLOAT_EQ(0.99629009, s.accept_stat()); EXPECT_EQ("", output_stream.str()); EXPECT_EQ("", error_stream.str()); }
TEST(McmcNutsBaseNuts, transition) { rng_t base_rng(0); int model_size = 1; double init_momentum = 1.5; stan::mcmc::ps_point z_init(model_size); z_init.q(0) = 0; z_init.p(0) = init_momentum; stan::mcmc::mock_model model(model_size); stan::mcmc::mock_nuts sampler(model, base_rng); sampler.set_nominal_stepsize(1); sampler.set_stepsize_jitter(0); sampler.sample_stepsize(); sampler.z() = z_init; std::stringstream debug, info, warn, error, fatal; stan::callbacks::stream_logger logger(debug, info, warn, error, fatal); stan::mcmc::sample init_sample(z_init.q, 0, 0); // Transition will expand trajectory until max_depth is hit stan::mcmc::sample s = sampler.transition(init_sample, logger); EXPECT_EQ(sampler.get_max_depth(), sampler.depth_); EXPECT_EQ((2 << (sampler.get_max_depth() - 1)) - 1, sampler.n_leapfrog_); EXPECT_FALSE(sampler.divergent_); EXPECT_EQ(21 * init_momentum, s.cont_params()(0)); EXPECT_EQ(0, s.log_prob()); EXPECT_EQ(1, s.accept_stat()); EXPECT_EQ("", debug.str()); EXPECT_EQ("", info.str()); EXPECT_EQ("", warn.str()); EXPECT_EQ("", error.str()); EXPECT_EQ("", fatal.str()); }
Sound_Sample *Sound_NewSample(SDL_RWops *rw, const char *ext, Sound_AudioInfo *desired, Uint32 bSize) { Sound_Sample *retval; decoder_element *decoder; /* sanity checks. */ BAIL_IF_MACRO(!initialized, ERR_NOT_INITIALIZED, NULL); BAIL_IF_MACRO(rw == NULL, ERR_INVALID_ARGUMENT, NULL); retval = alloc_sample(rw, desired, bSize); if (!retval) return(NULL); /* alloc_sample() sets error message... */ if (ext != NULL) { for (decoder = &decoders[0]; decoder->funcs != NULL; decoder++) { if (decoder->available) { const char **decoderExt = decoder->funcs->info.extensions; while (*decoderExt) { if (__Sound_strcasecmp(*decoderExt, ext) == 0) { if (init_sample(decoder->funcs, retval, ext, desired)) return(retval); break; /* done with this decoder either way. */ } /* if */ decoderExt++; } /* while */ } /* if */ } /* for */ } /* if */ /* no direct extension match? Try everything we've got... */ for (decoder = &decoders[0]; decoder->funcs != NULL; decoder++) { if (decoder->available) { int should_try = 1; const char **decoderExt = decoder->funcs->info.extensions; /* skip if we would have tried decoder above... */ while (*decoderExt) { if (__Sound_strcasecmp(*decoderExt, ext) == 0) { should_try = 0; break; } /* if */ decoderExt++; } /* while */ if (should_try) { if (init_sample(decoder->funcs, retval, ext, desired)) return(retval); } /* if */ } /* if */ } /* for */ /* nothing could handle the sound data... */ free(retval->opaque); if (retval->buffer != NULL) free(retval->buffer); free(retval); SDL_RWclose(rw); __Sound_SetError(ERR_UNSUPPORTED_FORMAT); return(NULL); } /* Sound_NewSample */
static bool test_rm(void) { struct pool4_sample samples[8]; unsigned int i; bool success = true; if (!add(0xc0000210U, 29, 5, 25)) /* 192.0.2.16-23 (5-25) */ return false; /* ---------------------------------------------------------- */ /* Remove some outermost ports from multiple addresses. */ if (!rm(0xc0000210U, 30, 5, 9)) /* Lower of 192.0.2.16-19 (exact)*/ return false; if (!rm(0xc0000214U, 30, 1, 9)) /* Lower of 192.0.2.20-23 (excess) */ return false; if (!rm(0xc0000210U, 30, 21, 25)) /* Upper of 192.0.2.16-19 (exact) */ return false; if (!rm(0xc0000214U, 30, 21, 30)) /* Upper of 192.0.2.20-23 (excess) */ return false; success &= assert_contains_range(0, 15, 0, 30, false); success &= assert_contains_range(16, 23, 0, 9, false); success &= assert_contains_range(16, 23, 10, 20, true); success &= assert_contains_range(16, 23, 21, 30, false); success &= assert_contains_range(24, 32, 0, 30, false); for (i = 0; i < 8; i++) init_sample(&samples[i], 0xc0000210U + i, 10, 20); success &= __foreach(samples, 8, 88); /* ---------------------------------------------------------- */ /* Remove a handful of addresses completely. */ if (!rm(0xc0000214U, 31, 10, 20)) /* 192.0.2.20-21 (exact)*/ return false; if (!rm(0xc0000216U, 31, 0, 30)) /* 192.0.2.22-23 (excess)*/ return false; success &= assert_contains_range(0, 15, 0, 30, false); success &= assert_contains_range(16, 19, 0, 9, false); success &= assert_contains_range(16, 19, 10, 20, true); success &= assert_contains_range(16, 19, 21, 30, false); success &= assert_contains_range(20, 32, 0, 30, false); success &= __foreach(samples, 4, 44); /* ---------------------------------------------------------- */ /* Punch a hole in ranges from multiple addresses. */ if (!rm(0xc0000212U, 31, 13, 17)) /* 192.0.2.18-19 (13-17) */ return false; success &= assert_contains_range(0, 15, 0, 30, false); success &= assert_contains_range(16, 17, 0, 9, false); success &= assert_contains_range(16, 17, 10, 20, true); success &= assert_contains_range(16, 17, 21, 30, false); success &= assert_contains_range(18, 19, 0, 9, false); success &= assert_contains_range(18, 19, 10, 12, true); success &= assert_contains_range(18, 19, 13, 17, false); success &= assert_contains_range(18, 19, 18, 20, true); success &= assert_contains_range(18, 19, 21, 30, false); success &= assert_contains_range(20, 32, 0, 30, false); init_sample(&samples[2], 0xc0000212U, 10, 12); init_sample(&samples[3], 0xc0000212U, 18, 20); init_sample(&samples[4], 0xc0000213U, 10, 12); init_sample(&samples[5], 0xc0000213U, 18, 20); success &= __foreach(samples, 6, 34); /* ---------------------------------------------------------- */ /* Remove multiple ranges from a single address at once. */ if (!rm(0xc0000213U, 32, 0, 30)) /* 192.0.2.19 (0-30) */ return false; success &= assert_contains_range(0, 15, 0, 30, false); success &= assert_contains_range(16, 17, 0, 9, false); success &= assert_contains_range(16, 17, 10, 20, true); success &= assert_contains_range(16, 17, 21, 30, false); success &= assert_contains_range(18, 18, 0, 9, false); success &= assert_contains_range(18, 18, 10, 12, true); success &= assert_contains_range(18, 18, 13, 17, false); success &= assert_contains_range(18, 18, 18, 20, true); success &= assert_contains_range(18, 18, 21, 30, false); success &= assert_contains_range(19, 32, 0, 30, false); success &= __foreach(samples, 4, 28); /* ---------------------------------------------------------- */ /* Finally, test an empty database. */ if (!rm(0xc0000200U, 24, 0, 65535U)) /* 192.0.2.0-255 (0-65535) */ return false; success &= assert_contains_range(0, 32, 0, 30, false); success &= __foreach(samples, 0, 0); return success; }
static bool test_add(void) { struct pool4_sample samples[8]; bool success = true; /* ---------------------------------------------------------- */ /* Add a single small range. */ if (!add(0xc0000211U, 32, 10, 20)) /* 192.0.2.17 (10-20) */ return false; success &= assert_contains_range(16, 16, 0, 30, false); success &= assert_contains_range(17, 17, 0, 9, false); success &= assert_contains_range(17, 17, 10, 20, true); success &= assert_contains_range(17, 17, 21, 30, false); success &= assert_contains_range(18, 18, 0, 30, false); init_sample(&samples[0], 0xc0000211U, 10, 20); success &= __foreach(samples, 1, 11); /* ---------------------------------------------------------- */ /* Append an adjacent range (left). They should join each other. */ if (!add(0xc0000211U, 32, 5, 10)) /* 192.0.2.17 (5-10) */ return false; success &= assert_contains_range(0, 16, 0, 30, false); success &= assert_contains_range(17, 17, 0, 4, false); success &= assert_contains_range(17, 17, 5, 20, true); success &= assert_contains_range(17, 17, 21, 30, false); success &= assert_contains_range(18, 32, 0, 30, false); init_sample(&samples[0], 0xc0000211U, 5, 20); success &= __foreach(samples, 1, 16); /* ---------------------------------------------------------- */ /* Append an adjacent range (right). They should join each other. */ if (!add(0xc0000211U, 32, 20, 25)) /* 192.0.2.17 (20-25) */ return false; success &= assert_contains_range(0, 16, 0, 30, false); success &= assert_contains_range(17, 17, 0, 4, false); success &= assert_contains_range(17, 17, 5, 25, true); success &= assert_contains_range(17, 17, 26, 30, false); success &= assert_contains_range(18, 32, 0, 30, false); init_sample(&samples[0], 0xc0000211U, 5, 25); success &= __foreach(samples, 1, 21); /* ---------------------------------------------------------- */ /* Add intersecting ranges. They should join each other. */ if (!add(0xc0000210U, 32, 10, 20)) /* 192.0.2.16 (10-20) */ return false; if (!add(0xc0000210U, 32, 5, 12)) /* 192.0.2.16 (5-12) */ return false; if (!add(0xc0000210U, 32, 18, 25)) /* 192.0.2.16 (18-25) */ return false; success &= assert_contains_range(15, 15, 0, 30, false); success &= assert_contains_range(16, 17, 0, 4, false); success &= assert_contains_range(16, 17, 5, 25, true); success &= assert_contains_range(16, 17, 26, 30, false); success &= assert_contains_range(18, 18, 0, 30, false); init_sample(&samples[0], 0xc0000210U, 5, 25); init_sample(&samples[1], 0xc0000211U, 5, 25); success &= __foreach(samples, 2, 42); /* ---------------------------------------------------------- */ /* Add a bigger range. The bigger one should replace. */ if (!add(0xc0000212U, 32, 10, 20)) /* 192.0.2.18 (10-20) */ return false; if (!add(0xc0000212U, 32, 5, 25)) /* 192.0.2.18 (5-25) */ return false; success &= assert_contains_range(0, 15, 0, 30, false); success &= assert_contains_range(16, 18, 0, 4, false); success &= assert_contains_range(16, 18, 5, 25, true); success &= assert_contains_range(16, 18, 26, 30, false); success &= assert_contains_range(19, 32, 0, 30, false); init_sample(&samples[2], 0xc0000212U, 5, 25); success &= __foreach(samples, 3, 63); /* ---------------------------------------------------------- */ /* Add an already existing range. Nothing should change. */ if (!add(0xc0000212U, 32, 5, 25)) /* 192.0.2.18 (5-25) */ return false; success &= assert_contains_range(0, 15, 0, 30, false); success &= assert_contains_range(16, 18, 0, 4, false); success &= assert_contains_range(16, 18, 5, 25, true); success &= assert_contains_range(16, 18, 26, 30, false); success &= assert_contains_range(19, 32, 0, 30, false); success &= __foreach(samples, 3, 63); /* ---------------------------------------------------------- */ /* Add a smaller range. Nothing should change. */ if (!add(0xc0000212U, 32, 5, 25)) /* 192.0.2.18 (10-20) */ return false; success &= assert_contains_range(0, 15, 0, 30, false); success &= assert_contains_range(16, 18, 0, 4, false); success &= assert_contains_range(16, 18, 5, 25, true); success &= assert_contains_range(16, 18, 26, 30, false); success &= assert_contains_range(19, 32, 0, 30, false); success &= __foreach(samples, 3, 63); /* ---------------------------------------------------------- */ /* Fill a hole. The three ranges should become one. */ if (!add(0xc0000213U, 32, 5, 10)) /* 192.0.2.19 (5-10) */ return false; if (!add(0xc0000213U, 32, 20, 25)) /* 192.0.2.19 (20-25) */ return false; if (!add(0xc0000213U, 32, 11, 19)) /* 192.0.2.19 (11-19) */ return false; success &= assert_contains_range(0, 15, 0, 30, false); success &= assert_contains_range(16, 19, 0, 4, false); success &= assert_contains_range(16, 19, 5, 25, true); success &= assert_contains_range(16, 19, 26, 30, false); success &= assert_contains_range(20, 32, 0, 30, false); init_sample(&samples[3], 0xc0000213U, 5, 25); success &= __foreach(samples, 4, 84); /* ---------------------------------------------------------- */ /* Cover several holes with one big range. */ if (!add(0xc0000214U, 32, 8, 11)) /* 192.0.2.20 (8-11) */ return false; if (!add(0xc0000214U, 32, 14, 17)) /* 192.0.2.20 (14-17) */ return false; if (!add(0xc0000214U, 32, 20, 23)) /* 192.0.2.20 (20-23) */ return false; if (!add(0xc0000214U, 32, 5, 25)) /* 192.0.2.20 (5-25) */ return false; success &= assert_contains_range(0, 15, 0, 30, false); success &= assert_contains_range(16, 20, 0, 4, false); success &= assert_contains_range(16, 20, 5, 25, true); success &= assert_contains_range(16, 20, 26, 30, false); success &= assert_contains_range(21, 32, 0, 30, false); init_sample(&samples[4], 0xc0000214U, 5, 25); success &= __foreach(samples, 5, 105); /* ---------------------------------------------------------- */ /* * Now add four addresses in one call. * First one intersects, so only 3 are committed. */ if (!add(0xc0000214U, 30, 5, 25)) /* 192.0.2.20-23 (5-25) */ return false; success &= assert_contains_range(0, 15, 0, 30, false); success &= assert_contains_range(16, 23, 0, 4, false); success &= assert_contains_range(16, 23, 5, 25, true); success &= assert_contains_range(16, 23, 26, 30, false); success &= assert_contains_range(24, 32, 0, 30, false); init_sample(&samples[5], 0xc0000215U, 5, 25); init_sample(&samples[6], 0xc0000216U, 5, 25); init_sample(&samples[7], 0xc0000217U, 5, 25); success &= __foreach(samples, 8, 168); return success; }