[ANN] Pex for fun
От: z00n  
Дата: 26.06.10 15:23
Оценка: 22 (2)
Онлайн демо грядущей разработки MS (http://research.microsoft.com/en-us/projects/pex/)

http://www.pexforfun.com/
Re: [ANN] Pex for fun
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.06.10 18:33
Оценка:
Здравствуйте, z00n, Вы писали:

Z>Онлайн демо грядущей разработки MS (http://research.microsoft.com/en-us/projects/pex/)


Z>http://www.pexforfun.com/


Ну для кого "грядущей", а для других вполне нормально и сейчас используемой.
Re: [ANN] Pex for fun
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 26.06.10 21:45
Оценка:
Здравствуйте, z00n, Вы писали:

Z>Онлайн демо грядущей разработки MS (http://research.microsoft.com/en-us/projects/pex/)


Z>http://www.pexforfun.com/


Дык в MSDN Magazine про неё писали ещё с полгода назад...
[КУ] оккупировала армия.
Re: [ANN] Pex for fun
От: Аноним  
Дата: 26.06.10 22:55
Оценка:
Здравствуйте, z00n, Вы писали:
Z>http://www.pexforfun.com/

Черт, машина оказалась умнее меня
Хотел нагрузить её задачкой
  public static string Puzzle(int x) 
  {
     if (x <= 0) { return "nice try"; }

     while (x > 1) 
     {
         if (x % 2 == 0) { x = x / 2; }
         else { x = x * 3 + 1; }     
     }

     return x.ToString();
  }

так она помимо "nice try" и "1" в числе возможных вариантов нашла совершенно мной не предвиденное (Аноним может себе позволить признаться) значение "0". Вердикт — срочно в продакшен круглосуточно крутиться на сервере и искать баги.
Re[2]: [ANN] Pex for fun
От: z00n  
Дата: 27.06.10 11:26
Оценка:
Здравствуйте, koandrew, Вы писали:


K>Дык в MSDN Magazine про неё писали ещё с полгода назад...


Это анонс сайта http://www.pexforfun.com а не самого Pex'а
Re: [ANN] Pex for fun
От: Аноним  
Дата: 27.06.10 11:35
Оценка:
Здравствуйте, z00n, Вы писали:

Z>Онлайн демо грядущей разработки MS (http://research.microsoft.com/en-us/projects/pex/)


Z>http://www.pexforfun.com/


а про что это? — чет ниче не понял
Re[2]: [ANN] Pex for fun
От: Аноним  
Дата: 27.06.10 12:03
Оценка:
А>
А>  public static string Puzzle(int x) 
А>  {
А>     if (x <= 0) { return "nice try"; }

А>     while (x > 1) 
А>     {
А>         if (x % 2 == 0) { x = x / 2; }
А>         else { x = x * 3 + 1; }     
А>     }

А>     return x.ToString();
А>  }
А>

А>так она помимо "nice try" и "1" в числе возможных вариантов нашла совершенно мной не предвиденное (Аноним может себе позволить признаться) значение "0". Вердикт — срочно в продакшен круглосуточно крутиться на сервере и искать баги.

А как тут 0 может сыграть ? Он же по нему сразу выйти должен по первому условию x<=0
Re[2]: [ANN] Pex for fun
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 27.06.10 16:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а про что это? — чет ниче не понял


А почитать описание не судьба?
Коротко — автоматический тул для анализа кода и создания юнит-тестов.
[КУ] оккупировала армия.
Re: [ANN] Pex for fun
От: nikov США http://www.linkedin.com/in/nikov
Дата: 27.06.10 16:10
Оценка:
Здравствуйте, z00n, Вы писали:

Z>Онлайн демо грядущей разработки MS (http://research.microsoft.com/en-us/projects/pex/)


Pex не смог придумать никаких интересных входных данных для таких методов:

public static void Foo(object x)
{
    if (x is Func<string>)
        throw new Exception();
}


public static void Foo(object x)
{
    if (x is Array)
        throw new Exception();
}


public static void Foo(object x)
{
    if (x != null && x.Equals(DayOfWeek.Friday))
        throw new Exception();
}


public static void Foo(Type x)
{
    if (x != null && x.IsGenericType)
        throw new Exception();
}


public static void Foo(Type x)
{
    if (x != null && x.IsClass)
        throw new Exception();
}


public static void Foo(Array x)
{
    if (x != null && x.Rank == 1)
        throw new Exception();
}


public static void Foo(Array x)
{
    if (x != null && x.Length == 1)
        throw new Exception();
}


Но, в целом, тул очень интересный.
Re[3]: [ANN] Pex for fun
От: andy1618 Россия  
Дата: 01.07.10 18:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>
А>>  public static string Puzzle(int x) 
А>>  {
А>>     if (x <= 0) { return "nice try"; }

А>>     while (x > 1) 
А>>     {
А>>         if (x % 2 == 0) { x = x / 2; }
А>>         else { x = x * 3 + 1; }     
А>>     }

А>>     return x.ToString();
А>>  }
А>>

А>>так она помимо "nice try" и "1" в числе возможных вариантов нашла совершенно мной не предвиденное (Аноним может себе позволить признаться) значение "0". Вердикт — срочно в продакшен круглосуточно крутиться на сервере и искать баги.

А>А как тут 0 может сыграть ? Он же по нему сразу выйти должен по первому условию x<=0


Тут фишка — в переполнениях типа int в строке, где производится умножение на 3.
Рассмотрим упрощённый случай, когда переполнение будет на первой же итерации цикла while.

Первое переполнение для int происходит при переходе от 2^31-1 (int.MaxValue) к 2^31 (int.MinValue).
Соответственно, в нашем случае минимальным нечётным x, при котором выражение x * 3 + 1 превысит 2^31-1, будет
x = 715827883 (результатом программы будет число -2147483646).
При дальнейшем увеличении x с шагом 2 будем получать на выходе похожие отрицательные числа, растущие к 0.

Второе переполнение для int происходит при переходе от 2^32-1 к 2^32.
Аналогично, минимальным нечётным x, при котором выражение x * 3 + 1 превысит 2^32-1, будет
x = 1431655765, а результатом программы будет наш искомый 0
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.