test_factor_number = ->
  run_test [

    "factor(0)",
    "0",

    "factor(1)",
    "1",

    "factor(2)",
    "2",

    "factor(3)",
    "3",

    "factor(4)",
    "2^2",

    "factor(5)",
    "5",

    "factor(6)",
    "2*3",

    "factor(7)",
    "7",

    "factor(8)",
    "2^3",

    "factor(9)",
    "3^2",

    "factor(10)",
    "2*5",

    "factor(100!)",
    "2^97*3^48*5^24*7^16*11^9*13^7*17^5*19^5*23^4*29^3*31^3*37^2*41^2*43^2*47^2*53*59*61*67*71*73*79*83*89*97",

    "factor(2*(2^30-35))",
    "2*1073741789",

    # x is the 10,000th prime

    # Prime factors greater than x^2 are found using the Pollard rho method

    "a=104729",
    "",

    "factor(2*(a^2+6))",
    "2*10968163447",

    "factor((a^2+6)^2)",
    "10968163447*10968163447",  # FIXME should be 10968163447^2

    "factor((a^2+6)*(a^2+60))",
    "10968163501*10968163447",  # FIXME sort order

    "f=(x+1)*(x+2)*(y+3)*(y+4)",
    "",

    "factor(f,x,y)",
    "(x+1)*(x+2)*(y+3)*(y+4)",

    "factor(f,y,x)",
    "(x+1)*(x+2)*(y+3)*(y+4)",

    "f=(x+1)*(x+1)*(y+2)*(y+2)",
    "",

    "factor(f,x,y)",
    "(x+1)^2*(y+2)^2",

    "factor(f,y,x)",
    "(x+1)^2*(y+2)^2",

    "factor((x+1)*(-x^2+x+1),x)",
    "-(x^2-x-1)*(x+1)",
      
    "factor((x+1)*(x^2-x-1),x)",
    "(x^2-x-1)*(x+1)",

    "factor(5*x^3-5)",
    "5*(x-1)*(x^2+x+1)",

    "factor((x+1)*(2x+4))",
    "2*(x+1)*(x+2)",

    "factor(x^8 - 1)",
    "(x-1)*(x+1)*(x^2+1)*(x^4+1)",

    "factor((x-1)*(x+1)*(x^2+1)*(2*x^4+2))",
    "2*(x-1)*(x+1)*(x^2+1)*(x^4+1)",

    "factor((x-1)*(x+1)*(2*x^2+2)*(x^4+1))",
    "2*(x-1)*(x+1)*(x^2+1)*(x^4+1)",

    "factor(x^1 - 1)",
    "x-1",

    "factor(x^2 - 1)",
    "(x-1)*(x+1)",

    "factor(x^3 - 1)",
    "(x-1)*(x^2+x+1)",

    "factor(x^4 - 1)",
    "(x-1)*(x+1)*(x^2+1)",

    "factor(x^5 - 1)",
    "(x-1)*(x^4+x^3+x^2+x+1)",

    "factor(x^6 - 1)",
    "(x-1)*(x+1)*(x^2+x+1)*(x^2+1)",

    "factor(x^7 - 1)",
    "(x-1)*(x^6+x^5+x^4+x^3+x^2+x+1)",

    # irreducible in Z
    "factor(1+x+x^2+x^3+x^4)",
    "x^4+x^3+x^2+x+1",

    "factor(x^4 - 1*x^3 + 4*x^2 + 3*x + 5)",
    "(x^2+x+1)*(x^2-2*x+5)",

    # https://github.com/davidedc/Algebrite/issues/113
    "factor((x^3+x^2+x)*(y^3+y^2),x,y)",
    "x*y^2*(x^2+x+1)*(y+1)",

    # clean up
    "a = quote(a)",
    "",

    "f = quote(f)",
    "",

  ]
