GithubHelp home page GithubHelp logo

libgod's Issues

desctructor for Union

Я попытлся вызвать un.~Union(); чтобы убить объект в явном виде, скомпилилось, но упало с ошибкой.

Надо бы прояснить вопрос с тем стоит ли вызывать деструкторы или просто как убивать объекты корректно.

*** glibc detected *** ./gendata4test: double free or corruption (fasttop): 0x08c1f038 ***
======= Backtrace: =========
/lib/i686/cmov/libc.so.6(+0x6b381)[0xb752c381]
/lib/i686/cmov/libc.so.6(+0x6cbd8)[0xb752dbd8]
/lib/i686/cmov/libc.so.6(cfree+0x6d)[0xb7530cbd]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb7708701]
./gendata4test(_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIN6libgod3SetEEE10deallocateEPS4_j+0x11)[0x804a4f3]
./gendata4test(_ZNSt10_List_baseIN6libgod3SetESaIS1_EE11_M_put_nodeEPSt10_List_nodeIS1_E+0x20)[0x804a3a8]
./gendata4test(_ZNSt10_List_baseIN6libgod3SetESaIS1_EE8_M_clearEv+0x84)[0x804a242]
./gendata4test(_ZNSt10_List_baseIN6libgod3SetESaIS1_EED2Ev+0x13)[0x804a0a3]
./gendata4test(_ZNSt4listIN6libgod3SetESaIS1_EED1Ev+0x11)[0x804a019]
./gendata4test(_ZN6libgod9ContainerINS_3SetESt4listIS1_SaIS1_EEED2Ev+0x44)[0x804a060]
./gendata4test(_ZN6libgod5UnionD1Ev+0x11)[0x804a079]
./gendata4test(main+0x155)[0x8049f09]
/lib/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xb74d7ca6]
./gendata4test[0x8049d21]
======= Memory map: ========
08048000-0804c000 r-xp 00000000 08:01 1217240 /home/artyom/workspace/libgod/build/examples/gendata/gendata4test
0804c000-0804d000 rw-p 00003000 08:01 1217240 /home/artyom/workspace/libgod/build/examples/gendata/gendata4test
08c1f000-08c40000 rw-p 00000000 00:00 0 [heap]
b7300000-b7321000 rw-p 00000000 00:00 0
b7321000-b7400000 ---p 00000000 00:00 0
b74c0000-b74c1000 rw-p 00000000 00:00 0
b74c1000-b7601000 r-xp 00000000 08:01 538817 /lib/i686/cmov/libc-2.11.3.so
b7601000-b7602000 ---p 00140000 08:01 538817 /lib/i686/cmov/libc-2.11.3.so
b7602000-b7604000 r--p 00140000 08:01 538817 /lib/i686/cmov/libc-2.11.3.so
b7604000-b7605000 rw-p 00142000 08:01 538817 /lib/i686/cmov/libc-2.11.3.so
b7605000-b7608000 rw-p 00000000 00:00 0
b7608000-b7625000 r-xp 00000000 08:01 522243 /lib/libgcc_s.so.1
b7625000-b7626000 rw-p 0001c000 08:01 522243 /lib/libgcc_s.so.1
b7626000-b764a000 r-xp 00000000 08:01 538799 /lib/i686/cmov/libm-2.11.3.so
b764a000-b764b000 r--p 00023000 08:01 538799 /lib/i686/cmov/libm-2.11.3.so
b764b000-b764c000 rw-p 00024000 08:01 538799 /lib/i686/cmov/libm-2.11.3.so
b764c000-b764d000 rw-p 00000000 00:00 0
b764d000-b7736000 r-xp 00000000 08:01 728156 /usr/lib/libstdc++.so.6.0.13
b7736000-b773a000 r--p 000e9000 08:01 728156 /usr/lib/libstdc++.so.6.0.13
b773a000-b773b000 rw-p 000ed000 08:01 728156 /usr/lib/libstdc++.so.6.0.13
b773b000-b7742000 rw-p 00000000 00:00 0
b7751000-b7752000 rw-p 00000000 00:00 0
b7752000-b779d000 r-xp 00000000 08:01 1217201 /home/artyom/workspace/libgod/build/lib/libgod.so.1.0.0
b779d000-b77a0000 rw-p 0004a000 08:01 1217201 /home/artyom/workspace/libgod/build/lib/libgod.so.1.0.0
b77a0000-b77a2000 rw-p 00000000 00:00 0
b77a2000-b77a3000 r-xp 00000000 00:00 0 [vdso]
b77a3000-b77be000 r-xp 00000000 08:01 523984 /lib/ld-2.11.3.so
b77be000-b77bf000 r--p 0001b000 08:01 523984 /lib/ld-2.11.3.so
b77bf000-b77c0000 rw-p 0001c000 08:01 523984 /lib/ld-2.11.3.so
bfeba000-bfecf000 rw-p 00000000 00:00 0 [stack]

undefined reference to `pthread_getspecific'

Вроде установил gtest по твоей и еще куче гугловским инструкциям, поправил build.conf, но при попытке собрать весь проект получаю:

/home/artyom/workspace/gtest-1.6.0/libgtest.a(gtest-all.cc.o): In function 'testing::internal::ThreadLocal<testing::TestPartResultReporterInterface*>::~ThreadLocal()':
gtest-all.cc:(.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED1Ev[testing::internal::ThreadLocal<testing::TestPartResultReporterInterface*>::~ThreadLocal()]+0x11): undefined reference to `pthread_getspecific'

Нашел что-то подобное на stackoverflow (http://stackoverflow.com/questions/10315016/error-during-making-gtest), но честно хз, так как там говорят надо внести изменения в g++ строчку, а это твоя привилегия :)

P.S. Я пытался клинить весь проект и пересобирать, тоже самое.

storage::read/write throws exception basic_ios::clear in full filenames specified

Тест testunionio считывает с диска входной файл с данными в память, потом снова его серилизует на диск и мы сравниваем, что два файла равны друг другу.

Если вызывать вот так:

testunionio input.union1 input.union1.out

Все ОК. Но если вот так:

testunionio /home/artyom/workspace/libgod/build/input.union1 /home/artyom/workspace/libgod/build/input.union1.out

То кидает эксепшн:

Running test /home/artyom/workspace/libgod/test/testunionio.cxx
 #0 ./testunionio
 #1 /home/artyom/workspace/libgod/build/input.union1
 #2 /home/artyom/workspace/libgod/build/input.union1.out
Test error: basic_ios::clear

Тест вроде предельно похож на то, что реализовано было в fileread, команды CTest в CMakeList тоже аналогичны. Но падает.

wrong output when use setparameters and setcriteria functions

Если я пишу вот такой код

    //input.union2: Union with 2 sets each has 2 points
    libgod::Union un2(5,3);

    double parameters[] = {1.2, -0.9, 6.7, 1.209, 4.731};
    double criteria[] = {0.99, 0.76, 0.12};

    for (int i=0; i<un2.size(); i++) {
        libgod::Set& s = un2.add();
        for (int j=0; j<2; j++) {
            libgod::Point& p = s.add();
            p.setParameters(parameters);
            p.setCriteria(criteria);
        }
    }

    libgod::Storage st2("input.union2");
    st2.write(un2);
    st2.dump(std::cout, un2);

то dump() выводит:


1



5
3
0



Да и input.union2 получается подозрительно маленький
-rw-r--r-- 1 artyom artyom 22 Июл 8 01:38 input.union2

change filename for Storage

Текущая реализация класса Storage не позволяет менять файл ввода или вывода. То есть, если я хочу ввести или распечатать данные для нескольких union, то придется создавать несколько экземпляров класса Storage.

Так же класс Storage поддерживает только Union в даный момент. Может имеет смысл расширить его до Set и Point?

build.sh doesn't build

Two problems:

  1. It started to show that cmake_minimum_required(VERSION 2.8) is required.
  2. ./build.sh
    -- Copying input1.asn1
    -- Copying input2.asn1
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/artyom/workspace/libgod
    make: *** Не заданы цели и не найден make-файл. Останов.

storage::read doesn't work

Привет. Может я сам и внес багу, криво добавив Union::Union(). Но он по-любому нужен для того, чтобы инициализировать множества из файла. Я использовал вот такой код:
libgod::Union un;
libgod::Storage st( argv[1] );

    st.read(un);

    //Print dump to stdout
    st.dump(std::cout, un);

И вывод получается как будто ничего не было считано. Вывод dump() как раз это и показывает:


1



1
1
0



liggod::Set set1(<negative number>, num) doesn't thrown exception

Привет, вот такой вот код не кидает эксепшена. Может я томожу конечно, но по идее должно кидаться

// Check if dim paramteres is negative and dim criteria is positive
    is_thrown = false;  
    try {
        libgod::Set set1(-10, 2);
    }
    catch (libgod::GodError& ge) {
        is_thrown = true;
    }
    ASSERT_TRUE(is_thrown);

    // Check if only dim criteria is negative
    is_thrown = false;
    try {
        libgod::Set set1(3, -5);    
    }
    catch (libgod::GodError& ge) {
        is_thrown = true;
    }
    ASSERT_TRUE(is_thrown);

    // Check if both parameters are negative
    is_thrown = false;
    try {
        libgod::Set set1(-7, -5);   
    }
    catch (libgod::GodError& ge) {
        is_thrown = true;
    }
    ASSERT_TRUE(is_thrown);

В ответ

terminate called after throwing an instance of 'libgod::assert_exception'
what(): assertTrue at 63 : false - 0
Аварийный останов

if I pass pointers to arrays with larger size than dims, it works

// Pass pointers to array smaller than specified in dimensions
int testpoint_constructor_array_larger_dim() {
    bool is_thrown = false;

    double* a = new double [10];
    double* b = new double [6];

    try {
        libgod::Point pt1(4,3,a,b);
    }
    catch (libgod::GodError& ge) {
        is_thrown = true;
    }
    ASSERT_TRUE(is_thrown);

    return !is_thrown;
}

Это бага или фича. По идее ты в memcpy указываешь сколько надо скопировать. Поэтому мы не получаем ошибку сегментации, но логически это неправильно. Или оставим на совесть пользователя?

add parameters inherit for libgod::Set and libgod::Uninon dflt consturctors

Общая идея, чтобы вот такой код работал:

    libgod::Set set1;
    libgod::Point pt(4,3);

    set1.add(pt);

То есть, если используется конструктор по умолчанию для Union и Set, то первый добавленный элемент со значимыми параметрами инициализирует параметры Set или Union.

segmentaion fault for null pointers in libgod::Point

// Pass not valid pointers to libgod::Point constructor
int testpoint_constructor_null_ptrs() {
    bool is_thrown = false;

    double a[5];

    try {
        libgod::Point pt1(7,2, a, 0);
        libgod::Point pt2(7,2, 0, a);
        libgod::Point pt3(3,4, 0, 0);
    }
    catch (libgod::GodError& ge) {
        is_thrown = true;
    }
    ASSERT_TRUE(is_thrown);

    return !is_thrown;
}

Segmentation fault.

И как в развитие мысли. Если мы туда будем передавать не нулевые поинтеры, а невалидные. Например (double*)1000, то тоже будет падать с ошибкой сегментирования. Оставим это как есть или можно что-нибудь сделать?

change filename for Storage

Текущая реализация класса Storage не позволяет менять файл ввода или вывода. То есть, если я хочу ввести или распечатать данные для нескольких union, то придется создавать несколько экземпляров класса Storage.

Так же класс Storage поддерживает только Union в даный момент. Может имеет смысл расширить его до Set и Point?

libgod::Point should throw exception in case of equal ptr usage

// Pass equal pointers to array
int testpoint_constructor_array_eq_ptr() {
    bool is_thrown = false;

    double* a = new double [10];

    try {
        libgod::Point pt1(10,10,a,a);
    }
    catch (libgod::GodError& ge) {
        is_thrown = true;
    }
    ASSERT_TRUE(is_thrown);

    delete(a);

    return !is_thrown;
}

Формально все корректно. Но имхо либа не должна этого позволять, так как это с точки зрения задачи абсолютно не логично и ведет к косякам в программировании алгоритмов.

test_comparable failing with gcc-4.4

Works on osx/gcc-4.2, osx/clang-4.0, but fails on linux/gcc-4.4

2/8 Test #2: test_comparable ..................***Failed    0.01 sec
Running main() from gtest_main.cc
[==========] Running 3 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 3 tests from Comparable
[ RUN      ] Comparable.Strict
[       OK ] Comparable.Strict (1 ms)
[ RUN      ] Comparable.NonStrict
[       OK ] Comparable.NonStrict (0 ms)
[ RUN      ] Comparable.Union
/home/irix/projects/libgod/test/test_comparable.cxx:85: Failure
Value of: c(u1,u2)
  Actual: false
Expected: true
/home/irix/projects/libgod/test/test_comparable.cxx:86: Failure
Value of: !c(u2,u1)
  Actual: false
Expected: true
[  FAILED  ] Comparable.Union (1 ms)
[----------] 3 tests from Comparable (2 ms total)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.