Esempio n. 1
0
TEST(tagged, float_32) {
  ASSERT_EQ(sizeof(uint32_t), sizeof(float32_t));

  value_t one = new_float_32(1.0);
  ASSERT_TRUE(get_float_32_value(one) == 1.0);
  value_t zero = new_float_32(0.0);
  ASSERT_TRUE(get_float_32_value(zero) == 0.0);
  value_t minus_one = new_float_32(-1.0);
  ASSERT_TRUE(get_float_32_value(minus_one) == -1.0);

  ASSERT_VALEQ(equal(), value_ordering_compare(one, one));
  ASSERT_VALEQ(equal(), value_ordering_compare(zero, zero));
  ASSERT_VALEQ(equal(), value_ordering_compare(minus_one, minus_one));
  ASSERT_VALEQ(less_than(), value_ordering_compare(minus_one, zero));
  ASSERT_VALEQ(less_than(), value_ordering_compare(zero, one));
  ASSERT_VALEQ(greater_than(), value_ordering_compare(zero, minus_one));
  ASSERT_VALEQ(greater_than(), value_ordering_compare(one, zero));

  value_t nan = float_32_nan();
  ASSERT_VALEQ(unordered(), value_ordering_compare(nan, nan));
  ASSERT_VALEQ(unordered(), value_ordering_compare(nan, one));
  ASSERT_VALEQ(unordered(), value_ordering_compare(nan, zero));
  ASSERT_VALEQ(unordered(), value_ordering_compare(zero, nan));
  ASSERT_VALEQ(unordered(), value_ordering_compare(one, nan));
  ASSERT_SAME(nan, nan);

  value_t inf = float_32_infinity();
  value_t minf = float_32_minus_infinity();
  ASSERT_VALEQ(unordered(), value_ordering_compare(nan, inf));
  ASSERT_VALEQ(unordered(), value_ordering_compare(inf, nan));
  ASSERT_VALEQ(unordered(), value_ordering_compare(nan, minf));
  ASSERT_VALEQ(unordered(), value_ordering_compare(minf, nan));
  ASSERT_VALEQ(less_than(), value_ordering_compare(one, inf));
  ASSERT_VALEQ(greater_than(), value_ordering_compare(inf, one));
  ASSERT_VALEQ(greater_than(), value_ordering_compare(one, minf));
  ASSERT_VALEQ(less_than(), value_ordering_compare(minf, one));
  ASSERT_VALEQ(equal(), value_ordering_compare(inf, inf));
  ASSERT_VALEQ(greater_than(), value_ordering_compare(inf, minf));
  ASSERT_VALEQ(less_than(), value_ordering_compare(minf, inf));

  ASSERT_TRUE(is_float_32_nan(nan));
  ASSERT_FALSE(is_float_32_nan(minus_one));
  ASSERT_FALSE(is_float_32_nan(zero));
  ASSERT_FALSE(is_float_32_nan(one));
  ASSERT_FALSE(is_float_32_nan(inf));
  ASSERT_FALSE(is_float_32_nan(minf));

  ASSERT_FALSE(is_float_32_finite(nan));
  ASSERT_TRUE(is_float_32_finite(minus_one));
  ASSERT_TRUE(is_float_32_finite(zero));
  ASSERT_TRUE(is_float_32_finite(one));
  ASSERT_FALSE(is_float_32_finite(inf));
  ASSERT_FALSE(is_float_32_finite(minf));
}
    void disperse(const std::vector<Element>& collection,
        const std::string& name, Handler&& handler, Args&&... args)
    {
        const auto call = synchronize(FORWARD_HANDLER(handler),
            collection.size(), name);

        for (const auto& element: collection)
            unordered(BIND_ELEMENT(args, element, call));
    }
Esempio n. 3
0
File: all.cpp Progetto: caomw/halmd
static void
test_unordered(
    unsigned int nparticle
  , unsigned int nspecies
  , unsigned int repeat
)
{
    typedef typename test_suite_type::particle_type particle_type;
    typedef typename test_suite_type::particle_group_type particle_group_type;
    typedef typename particle_group_type::size_type size_type;
    typedef typename test_suite_type::all_type all_type;

    BOOST_TEST_MESSAGE("  " << "all of " << nparticle << " particles");
    BOOST_TEST_MESSAGE("  " << repeat << " iterations");

    std::shared_ptr<particle_type> particle = std::make_shared<particle_type>(nparticle, nspecies);
    std::shared_ptr<particle_group_type> group = std::make_shared<all_type>(particle);
    {
        BOOST_CHECK_EQUAL( *group->size(), nparticle );
    }

    halmd::cache<> size_cache = group->size();
    halmd::cache<> unordered_cache = group->unordered();

    halmd::accumulator<double> elapsed;
    for (size_type i = 0; i < repeat; ++i) {
        std::vector<size_type> reverse_tag = make_random_tag(nparticle);

        BOOST_CHECK( size_cache == group->size() );
        BOOST_CHECK( unordered_cache == group->unordered() );
        BOOST_CHECK( set_reverse_tag(
            *particle
          , reverse_tag.begin()) == reverse_tag.end()
        );
        {
            halmd::scoped_timer<halmd::timer> t(elapsed);
            BOOST_CHECK( unordered_cache == group->unordered() );
        }

        std::vector<size_type> unordered(nparticle);
        BOOST_CHECK( get_unordered(
            *group
          , unordered.begin()) == unordered.end()
        );
        BOOST_CHECK_EQUAL_COLLECTIONS(
            unordered.begin()
          , unordered.end()
          , boost::make_counting_iterator(size_type(0))
          , boost::make_counting_iterator(nparticle)
        );
    }
    BOOST_TEST_MESSAGE( "  " << mean(elapsed) * 1e3 << " ± " << error_of_mean(elapsed) * 1e3 << " ms per iteration" );
}
Esempio n. 4
0
TEST(tagged, relation) {
  ASSERT_TRUE(test_relation(less_than(), reLessThan));
  ASSERT_TRUE(test_relation(less_than(), reLessThan | reEqual));
  ASSERT_FALSE(test_relation(less_than(), reEqual));
  ASSERT_FALSE(test_relation(less_than(), reGreaterThan));
  ASSERT_FALSE(test_relation(less_than(), reGreaterThan | reEqual));
  ASSERT_FALSE(test_relation(less_than(), reUnordered));

  ASSERT_FALSE(test_relation(equal(), reLessThan));
  ASSERT_TRUE(test_relation(equal(), reLessThan | reEqual));
  ASSERT_TRUE(test_relation(equal(), reEqual));
  ASSERT_FALSE(test_relation(equal(), reGreaterThan));
  ASSERT_TRUE(test_relation(equal(), reGreaterThan | reEqual));
  ASSERT_FALSE(test_relation(equal(), reUnordered));

  ASSERT_FALSE(test_relation(greater_than(), reLessThan));
  ASSERT_FALSE(test_relation(greater_than(), reLessThan | reEqual));
  ASSERT_FALSE(test_relation(greater_than(), reEqual));
  ASSERT_TRUE(test_relation(greater_than(), reGreaterThan));
  ASSERT_TRUE(test_relation(greater_than(), reGreaterThan | reEqual));
  ASSERT_FALSE(test_relation(greater_than(), reUnordered));

  ASSERT_FALSE(test_relation(unordered(), reLessThan));
  ASSERT_FALSE(test_relation(unordered(), reLessThan | reEqual));
  ASSERT_FALSE(test_relation(unordered(), reEqual));
  ASSERT_FALSE(test_relation(unordered(), reGreaterThan));
  ASSERT_FALSE(test_relation(unordered(), reGreaterThan | reEqual));
  ASSERT_TRUE(test_relation(unordered(), reUnordered));
}
Esempio n. 5
0
static value_t custom_tagged_ordering_compare(value_t a, value_t b) {
  CHECK_DOMAIN(vdCustomTagged, a);
  CHECK_DOMAIN(vdCustomTagged, b);
  custom_tagged_phylum_t a_phylum = get_custom_tagged_phylum(a);
  custom_tagged_phylum_t b_phylum = get_custom_tagged_phylum(b);
  if (a_phylum != b_phylum)
    return compare_signed_integers(a_phylum, b_phylum);
  phylum_behavior_t *behavior = get_custom_tagged_phylum_behavior(a_phylum);
  value_t (*ordering_compare)(value_t a, value_t b) = behavior->ordering_compare;
  if (ordering_compare == NULL) {
    return unordered();
  } else {
    return ordering_compare(a, b);
  }
}
 bool SpansCell::adjust(bool condition)
 {
     NearSpansUnorderedPtr unordered(_unordered);
     if (length != -1)
         unordered->totalLength -= length; // subtract old length
     if (condition)
     {
         length = end() - start();
         unordered->totalLength += length; // add new length
         
         if (!unordered->max || doc() > unordered->max->doc() || (doc() == unordered->max->doc()) && (end() > unordered->max->end()))
             unordered->max = shared_from_this();
     }
     unordered->more = condition;
     return condition;
 }
Esempio n. 7
0
static value_t object_ordering_compare(value_t a, value_t b) {
  CHECK_DOMAIN(vdHeapObject, a);
  CHECK_DOMAIN(vdHeapObject, b);
  heap_object_family_t a_family = get_heap_object_family(a);
  heap_object_family_t b_family = get_heap_object_family(b);
  if (a_family != b_family)
    // This may cause us to return a valid result even when a and b are not
    // comparable.
    return compare_signed_integers(a_family, b_family);
  family_behavior_t *behavior = get_heap_object_family_behavior(a);
  value_t (*ordering_compare)(value_t a, value_t b) = behavior->ordering_compare;
  if (ordering_compare == NULL) {
    return unordered();
  } else {
    return ordering_compare(a, b);
  }
}
Esempio n. 8
0
value_t value_ordering_compare(value_t a, value_t b) {
  value_domain_t a_domain = get_value_domain(a);
  value_domain_t b_domain = get_value_domain(b);
  if (a_domain != b_domain) {
    int a_ordinal = get_value_domain_ordinal(a_domain);
    int b_ordinal = get_value_domain_ordinal(b_domain);
    return compare_signed_integers(a_ordinal, b_ordinal);
  } else {
    switch (a_domain) {
      case vdInteger:
        return integer_ordering_compare(a, b);
      case vdHeapObject:
        return object_ordering_compare(a, b);
      case vdCustomTagged:
        return custom_tagged_ordering_compare(a, b);
      default:
        return unordered();
    }
  }
}